1 Sysselsetting i ulike næringer, etter arbeidssted
Haugalandet
Første regionen vi velger å se på er Haugalandet. Her ønsker vi å se på utviklingen fra 2008 til 2020, av antall ansatte i sin helhet i regionen, samt de 6 mest relevante næringene.

I 2020 er det i underkant av 50 000 ansatte i alle næringer på Haugalandet. Av Fig. 1 ser vi at Haugalandet fikk en nedgang i antall ansatte i 2015 og 2016. I 2017 og 2018 ble det vekst, frem til det snudde i 2019 igjen.

I Fig. 2 ser vi at flere av kommunene på Haugalandet har hatt liten arbeidsplassvekst, med unntak av Tysvær, Vindafjord og Karmøy i den siste tiårsperioden. Vi ser dette mer tydelig på fig. 3 og 4.


Figur 3 og 4 viser utviklingen av det totale antall ansatte i alle næringer på kommunalt nivå, innenfor Haugaland-regionen.
I disse figurene, så ser vi tydelig at Haugesund har hatt reduksjon i antall ansatte totalt sett, mens Karmøy, Vindafjord og Tysvær har hatt en markant vekst de siste ti årene. Siden Haugesund har flest arbeidsplasser betyr utviklingen i Haugesund mye for de samlede tallene.
Warning: Removed 1 row(s) containing missing values (geom_path).

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 5 og 6 viser utviklingen av de 6 mest relevante næringene i Haugalandsregionen på kommune nivå.
Vi ser i de tre største kommunene, Haugesund, Karmøy og Vindafjord utgjør næringene Helse- og Sosialtjenester og Industri de største. Helse- og Sosialtjenester har vokst jevnt og trutt de siste tiårene, mens antall ansatte i industrinæringen har variert fra kommune til kommune. I Haugalandet utgjør primærnæringer (jordbruk, Skogbrug og Fiske) en større andel, enn hos Karmøy og Haugesund hvor primærnæringene kun utgjøre en liten andel.
Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.
Det er relativt store kommunevise forskjeller i næringsstrukturen. Rogaland har en forholdsvis ensidig næringsstruktur, olje og gass er dominerende. Fylket er suverent dominerende for fossil energi. De har for øvrig de siste årene satset på et en mer differensiert næringsstruktur og næringsliv ved å satse på helse, IKT og fornybar energi.
I våre modeller, er satsingen på helse den mest tydelige. Av rent tekniske grunner er det vanskelig å se utviklingen i enkelte næringer som utgjør små andeler, på grunn av skalaen som er benyttet. Til tross for dette, kan man se at næringsstrukturen i regionen samlet generelt sett har endret seg lite.
Rogaland har gode jordbruksmuligheter, men i Fig. 2: Haugalandet ser vi en nedgang i sysselsettingen de siste tiårene, mens det er en marginal økning i Sunnhordaland, jf. Fig 9. I Fig. 12: ser vi at Tysnes har hatt en markant økning i primærnæringen, relativt sett.
Universitets- og høgskolesektoren er liten i Rogaland, og den består for det første av Universitetet i Stavanger (UiS) og Høgskulen på Vestlandet (HVL) med campus Haugesund.
Haugaland Vekst, som er eigd/drevet av Haugalandsregionen er i spissen på å legge til rette for å etablere ny industri samt andre arbeidsplasser i regionen.
I helsesektoren er Stavanger universitetssykehus (SuS) sentralt.
Sunnhordland
Videre ønsker vi å se på den samme utviklingen, men denne gangen i Sunnhordlandsregionen.

Her viser figur 7 utviklingen til den totale summen av ansatte i Sunnhordlandsregionen fra 2008 til 2020. Sunnhordaland har i 2020 i underkant av 25 500 ansatte. Vi ser ut ifrå figuren at Sunnhordlandsregionen hadde ein markant vekst ifrå 2008 til 2014 med periodar med svak nedgang. Fra 2014 har det vært en reduksjon i totalt antall ansatte.

Figur 8 viser utviklingen av totalt ansatte i Sunnhordlandsregionen på kommunenivå i hele regionen fra 2008 til 2020. Denne figuren gir oss en oversikt, men er ikke heilt brukervennelig. Vi lager dermed en mer oversiktlig figur, jf. figur 9 & 10.


Vi ser her ut ifra figur 9 og 10 utviklingen for hver enkelt kommune i Sunnhordland totalt sett, og her ser vi mye tydligere utviklingen fra 2008 til 2020. En kan se her at Kvinnherad, Etne og Fitjar har hatt en reduksjon i totalt ansatte, mens Tysnes og Sveio har hatt ein kraftig vekst. En interessant bemerking er Stord i 2014 og Kvinnherad fra 2008 til 2017.
For å få et bedre oversikt over utviklingen i kommunen ønsker vi å se på de 6 mest relevante næringene i hver kommune.

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 11 og 12 viser de 6 mest relevante næringene i hver enkelt kommune i Sunnhordlandsregionen fra 2008 til 2020.
En ser ut ifra figur 11 at i de tre største kommunene, Bømlo, Kvinnherad og Stord så har de alle hatt en reduksjon i industrien, samtidig som de har hatt en vekst i helse- og sosialtjenester. Tysnes har vært stabil når det kommer til industri, men har sett ein markant vekst i primærnæringen (Jordbruk, Skogbruk og Fiske).
Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.
Det første bemerkelsesverdige i Sunnhordlandsregionen er den markante reduksjonen i industri i Stord kommune i 2014, samt Kvinnherad fra 2008. Dette stemmer overens med to hendelser. Den første er oljeknekken i 2014 som medførte at bl.a. Aker Stord AS som er avhengig av Olje-industrien måtte permitere.
Stord er en kommune som har mye offshore industri. I 2008/2009 så stengte Sør-Norge Aluminium “B-Hallen” som medførte 50% reduksjon i produksjon, og dermed ansatte. Interessant å bemerke at i Kvinnherad så er antall industriarbeidere redusert samtidig som antall ansatte i Helse- og Sosialetjenester økt. Bømlo har også sett en stabil reduksjon i ansatte innen industri, samt vekst i Helse- og Sosialetjenester frem til 2018.
Ser en på hele Sunnhordlandsregionen i sin helhet, så ser vi en svært tydelig vekst innen Helse- og Sosialetjenester, og reduksjon innen industri i hele regionen. Kvinnherad, Tysnes og Fitjar har opplevd ein markant vekst innen primærnæring. Kan det vere ein grunn til dette som burde diskuterast??
3 Sysselsetting i ulike næringer, etter bosted (Modeller under arbeid)
Nå har vi sett på utviklingen av hvor mange som jobber i kommunene etter de 6 mest relevante næringene, fra 2008 til 2020, i regionene Haugalandet, Sunnhordland og Hardanger. Vi har også sett på Gini-koeffisientene og RDI-verdiene til utvalgte kommuner og næringer, samt problemstillingen ved disse verdiene i forhold til dataene våres og aggregeringsnivået vi har.
Videre skal vi nå se på utviklingen for hvor mange som bor i de ulike kommunene i regionene, som jobber innenfor de 6 mest relevante næringene, Gini-koeffisientene og RDI-verdiene for dette. Vi begynner med Haugalandet.
Haugalandet

Figuren viser at det er svingninger i antall ansatte i alle næringer for perioden, med et ca. Gjennomsnitt for perioden på 51.000 antall bosatte på Haugalandet som er sysselsatt i alle næringer. Svingningene varierer fra +/- 1.500 fra gjennomsnittet i perioden, det ser likevel ut til at svingene er stabile og normale ettersom det vil være naturlig med hensyn på at nye bedrifter starter opp i regionen, bedrifter som legger ned eller bedrifter som re-lokaliserer seg et annet sted.

Figuren viser en oversikt over antall ansatte i alle næringer etter kommuner på Haugalandet. Figuren viser at en rimelig stabil og relativt flat kurve for kommunene Utsira og Bokn, samt for Sauda og Vindafjord. For Tysvær viser figuren at det er litt mer svingninger, men de er lave sett i forhold til kommunene Karmøy og Haugesund. De to sistnevnte kommunene er de største i denne forbindelsen av antall ansatte i alle næringer, og de vil derfor også være mer utsatt for svingninger basert på at antall bedrifter er langt høyere, og da med hensyn på at bedrifter som starter opp, legger ned eller som re-lokaliserer seg.
Det vi imidlertid ser er at Haugesund og Karmøy er så store at det påvirker hvordan de mindre kommunene som Bokn, Tysvær, Sauda og Utsira blir fremstilt. Vi velger derfor å skille ut de store og mindre kommunene for seg som vist videre.

Denne figuren sammenligner antall ansatte i alle næringer for kommunene Haugesund, Karmøy og Vindafjord. Figuren viser at i året 2010, er det laveste året for perioden samlet for alle tre kommunene. Videre viser den at året 2014, var det høyeste året for perioden samlet for alle tre kommunene, og likedan viser figuren at fra 2014, har alle kommunene en nedgang frem til 2015-2016 før de tar seg opp igjen i 2018. Alle tre kommunene viser det samme mønsteret.

Denne figuren viser antall ansatte etter bosted i alle næringer for kommunene Bokn, Sauda, Tysvær og Utsira. Kommunene Bokn og Tysvær har siden 2008, hatt en gradvis, men noe ustabil økning i antall ansatte, mens kommunen Sauda og Utsira har hatt en gradvis nedgang i antall ansatte.
For å få en bedre oversikt over regionen så velger vi å se på utviklingen til næringene i kommunene, som vist på figurene under.


Figurene viser antall ansatte etter bosted, fordelt i ulike næringer for kommunene på Haugalandet for perioden 2008 – 2020. Helse- og sosialtjenester er en av de største næringene for alle kommunene og denne er gradvis økende for alle kommunene i perioden. Industri er også blant de største næringene for alle disse kommunene, og denne næringen er gradvis fallende for Haugesund, Karmøy har et enda større fall for denne næringen for perioden, da særlig i perioden 2008-2010. For Vindafjord er denne næringen gradvis økende frem til 2015, før den deretter gradvis faller igjen.
For Haugesund og Karmøy ser vi at næringen jordbruk og skogbruk er særlig lave i antall ansatte, men for Vindafjord er denne næringen betydelig høyere enn Haugesund og Karmøy. For næringen finansiering og forsikring er denne kurven lav og tilnærmet flat i alle kommunene for perioden, og det samme for næringen elektrisitet, vann og renovasjon. Bygg- og anleggsvirksomhet er også lav for Haugesund og Karmøy, men som jordbruk og skogbruk, er denne næringen høyere i Vindafjord sammenlignet mot kommunene Haugesund og Karmøy tatt i betraktning at Vindafjord har et betydelig lavere antall ansatte totalt enn Haugesund og Karmøy har.
Vi ser også samme trendene for de små kommunene på Haugalandet. Helse- og sosiale tjenester har estt en stabil vekst i Bokn, Sauda, Tysvær og utsira, mens industrien har, med unntak av bokn, sett en reduksjon i perioden 2008 - 2020. Utsira skiller seg og ut med å hatt en svak vekst i jordbruk, skogbruk og fiske i denne perioden.
Sunnhordland
Videre vil vi nå se på utviklingen for region Sunnhordland.

Denne figuren viser utviklingen av antall sysselsatte i alle næringer etter bosted i region Sunnhordland fra 2008 til 2020. Vi kan se utfra grafen at regionen hadde en kraftig vekst 2010 - 2014, før den falt kraftig i 2014 - 2016, før regionen igjen har sett en kraftig vekst 2016 - 2019. Ut fra grafen kan det se ut til at regionen igjen står ovenfor en ny reduksjon fra 2019 av.
Vi ønsker å se videre på utviklingen på kommunalt nivå, som vist i figur 24.

Vi ser ut fra grafen her at det er i hovedsak Stord, Kvinnherad og Bømlo som har sett den største svingningene i antall sysselsatte etter bosted. Men vi kan også klart se at disse 3 kommunene alle hadde et fall i 2014, som samsvarer med figur 23. Grafen er imidlertidig igjen ikke tydelig nok på grunn av de store kommunene, og vi fremstiller dermed grafene på kommunalt nivå her og for å tydeligjere utviklingen på kommunalt nivå.


Figur 25 og 26 viser her utviklingen i sysselsatte etter bosted i alle næringer på kommunalt nivå, men nå er hver kommune skilt fra hverandre og vi får et helt annet bilde. Vi ser nå reduksjonen i de tre store kommunene Stord, Kvinnherad og Bømlo mye mer tydelig og hvor drastisk denne reduksjonen har vært. Vi ser også nå at både Etne og Tysnes også har hatt en periode med kraftig reduksjon, med Etne 2014 - 2020 og Tysnes 2008 - 2012. Tysnes har sett en svak vekst fra 2012, mens fitjar såg sterk vekst 2009 - 2014 og har etter 2014 sett en svak reduksjon.
Vi er fortsatt ikke fornøyd, for vi ønsker å se på utviklingen til noen utvalgte næringer i kommunene, og ser dermed videre på figur 27 og 28.


Disse figurene, 27 og 28, viser utviklingen av sysselsatte etter bosted, på kommunalt nivå i Sunnhordlandsregionen 2008 - 2020.
Vi ser nå en trend for Stord, Bømlo og Kvinnherad. Alle disse tre kommunene hadde et kraftig fall i 2014. Kvinnherad hadde allerede en jevn reduksjon i industri frem til 2014, men hadde likevell et kraftig fall her, sammen med Stord og Bømlo. Reduksjonen i industri for Kvinnherad er mest sannsynelig stenging av “B-hallen” på Sør-Norge Aluminium AS i 2008 en av faktorene.
Vi såg akkuratt samme fallet når vi såg på sysselsetting etter arbeidssted tidlegere i rapporten. Dette kommer mest sannsynelig av olje-knekket i 2014. Aker Solutions, som det heter i dag, er blant Sunnhordlands største arbeidsplasser, og det er flere som pendler fra både Kvinnherad og Bømlo som jobber på Aker Solutions. Det er dermed naturlig at dårlige tider i olje-industrien vil påvirke Aker som igjen vil påvirke kommunene som har sysselsette i denne næringa. Vi ser enda et fall i Kvinnherad innen industri i 2016, og dette kommer mest sannsynelig av at Eide Marine Service på Halsnøy blei slått konkurs dette året.
Alle kommunene i region Sunnhordland har også sett en vekst innen helse- og sosialetjenester i perioden 2008 - 2020. Kvinnherad, Bømlo, Stord, Fitjar og Tysnes har sett en vekst innen jordbruk, skogbruk og fiske. Mest sannsynelig er fiske en stor del av veksten da Alsaker Fjordbruk har ekspandert i disse kommunene i denne perioden. Bygge- og Annleggsvirksomhet har også hatt en liten vekst i flere kommuner, mens finans relatert aktivitet har sett en jevn reduksjon i hele regionen.
Hardanger
Siste regionen vi ønsker å se på er Hardanger, mer spesifikt Odda frem til 2019 og Ullensvang frem til 2020. Vi har ikke tatt med Jondal i Hardanger frem til 2019. Igjen så ser vi nå på sysselsetting etter bosted.
Vi ser først på hele regionen samlet, jf. figur 29.

Denne figuren viser utviklingen i sysselsetting etter bosted, i hele regionen, og her er det noe som bør bemerkes. Først og fremst siden Jondal ikke var en del av dataene frem til 2019, men blir tatt med i Ullensvang i 2020 så vil vi se en unaturlig vekst i denne figuren i 2020. Dette er en svakhet i modellen og dataene våres. Det andre er at vi kan se en klar negativ utvikling i Hardanger frem til 2019.
For å illustrere utviklingen bedre, så skiller vi mellom Odda og Ullensvang ved neste figur.

Vi ser nå på denne figuren at både Odda og Ullensvang har hatt en negativ utvikling frem til og med 2019. Vi ser også problemstillingen med å ikke ta med Jondal under Hardanger kommer tydeligere frem nå med en ekstrem vekst etter sammenslåingen mellom Odda, Jondal og Ullensvang i 2020. Før vi velger å se på utvalgte næringer i hver kommune, velger vi først å dele kommunene opp hver for seg, slik at vi kan se utviklingen mer drastisk.

Vi ser her tydelig utviklingen til spessielt Odda, som berre stuper ned, uten tegn til å snu med det første. For å se utviklingen tydligere så deler vi igjen opp i noen utvalgte næringer i hver kommune, jf. figur 32.

Vi ser på denne figuren utviklingen av 6 ulike næringar, med hensyn på syssselsetting etter bosted, i Hardanger i denne perioden. Vi ser samme trender her i Hardanger som vi gjore for både Sunnhordland og Haugalandet: reduksjon i industri og primærnæringane, mens vi ser en vekst i helsetjenester. Det som er litt interessant å bemerke er at Odda såg en vekst i industri fra 2016 til 2019, men grunna sammenslåingen er det vanskelig å si noe om utviklingen for Odda spesifikt i 2020. Igjen så ser vi også samme ekstreme vekst i Ullensvang i 2020 som kommer av sammenslåingen.
Odda er kjent lokalt for sin aldrende befolkning, som mest sannsynelig er en viktig faktor for hvorfor Odda har sett så kraftig reduksjon i sysselsetting etter bosted, samtidig som kommunen har sett en vekst i helsetjenester.
Pendling
De ulike kommunene og regionene har ulike behov, for at regionene skal utvikle seg er pendling et viktig begrep for å tiltrekke seg arbeidskraft. Veldig mange kommuner har for lite arbeidsplasser i forhold til antall arbeidende innbyggere, som vil si at de fleste er avhengige av pendlere. Pendling kan være til andre kommuner i samme region eller til andre regioner. Alle kommuner har kanskje ikke arbeidsplasser innen alle fagfelt, arbeidstakere er derfor avhengig av å pendler til andre kommuner for å finne relevant arbeid. Det samme gjelder dersom arbeidstaker har tilhørighet til en kommune, men det ikke finnes relevant arbeid da er han også nødt til å søke jobb i andre kommuner. Her kommer begrepene innpendling og utpendling inn, som betyr at noen kommuner eller regioner har flere arbeidsplasser tilgjengelige enn de har innbyggere som kan jobbe innad i kommunen eller at de ikke har nok arbeidsplasser og innbyggerene er nødt til å søke jobb andre plasser. Vi skal se på innpendling og utpendling som vil kunne fortelle oss i hvilken grad et sted er integrert i et større arbeidsmarked https://regionalanalyse.no/rapport/3004/1/4.
Nedenfor vil vi først ta for oss regionen Haugalandet og Sunnhordland med Ullensvang, og se på disse regionene hver for seg. Så kommer en tabell som tar for seg disse regionene samlet. Vi ønsker først å skille disse to regionene for å se i hvilken kommune andelen av innpendling og utpendling er størst og minst. For så å se på pendlingen mellom regionene.
I radene sees pendling inn til kommunene. Nederste rad viser totalen av antall pendlere inn til den enkelte kommune. Her kan vi se en andel stillinger som er besatt av arbeidstakere fra andre kommuner i Haugalandsregionen.
I kolonnene ser man de som pendlere ut av hver enkelt kommune. Det vil si arbeidstakere som bor i en kommune, og som har arbeidsted i en annen kommune innenfor Hauglandsregionen.
De som er markert med gult er arbeidstakere som bor og jobber i samme kommune.
Hauglandsregionen:

Haugalandsregionen har 44119 arbeidsplasser, hvorav 13170 er pendlere.
Haugesund, Karmøy og Tysvær er de kommunene i regionen med høyest andel pendlere både når det gjelder inn- og utpendling. La oss se nærmere på Haugesund som har en stor del av arbeidstakerne i regionen. Det gjelder både når vi ser på innpendling, utpendling og de som bor og jobber i samme kommune. Ut ifra tabellen kan vi se at Haugesund har 11714 arbeidstakere som bor og jobber i kommunen. Fra Haugesund er det eksempelvis 1029 arbeidstakere som pendler til Tysvær og 2586 arbeidstakere som pendler til Karmøy. Til Sauda og Utsira er det en betydelig lavere andel som pendler. Grunnen til at det nok at det er mindre kommuner med færre arbeidsplasser. Mange av de som bor i distriktene som eksempelvis Sauda og Utsira jobber og bor i samme kommune. Vi kan se at i Sauda jobber og bor det 1789 arbeidstaker, mens de har 31 stykk som pendler inn til kommunen og 66 stykk som pendler ut av kommunen. Det kan være flere som pendler inn til og ut av kommunen fra andre regioner, men her ser vi tallene på de som pendler i Haugalandsregionen.
Vi vet at Haugesund er regionsentrum med sykehus og høgskole. Samtidig har Haugesund flere olje og sjøfartsnæringer. Det er sentralisert som betyr at det er grunnlag for et større jobbmarked. Det er årsaken til at Haugesund har mer innpendling enn de andre kommunene i regionen. Karmøy og Tysvær som ligger nærmest Haugesund har størst andel utpendling, også til Haugesund.
Sunnhordland

I Sunnhordlandsregionen er det 28275 arbeidstakere om har sin arbeidsplass, av disse er det 2575 som har sitt arbeid i en annen kommune enn den de bor i.
Som vi kan se er Stord den kommunen med flest arbeidstakere. Dette kan vi se i sammenheng med at Stord er som et sentrum for regionen. En del av de interkommunale samarbeidene har sine kontorer lokalisert på Stord. Stord har 7314 som både bor og arbeider innad i kommunen. Å av Stordabuen som pendler ut av kommunen er det flest som pendler til Bømlo og Fitjar. Dette gjelder også motsatt da Stord får flest innpendlere fra de samme kommunene. Stord og Ullensvang er de eneste kommunene som har flere som pendler inn enn ut.
I Etne er det ganske likt med inn og utpendlere da de har 66 som pendler ut og 61 som pendler inn til kommunen. Etne er også den kommunen som har minst arbeidere som driver med pendling.
Vi har valgt å ta med Ullensvang i Sunnhordlandsoversikten. Etne og Kvinnherad er begge nabokommuner til Ullensvang. Ullensvang har lite både inn og utpendling.
En samlet oversikt over Haugalandsregionen og Sunnhordlandsregionen

Vi har sett på inndelingene i de forskjellige regionene. Videre ønsker vi å se på regionene i en samlet tabell.
Vi har tidligere skrevet om at Haugalandsregionen har 13170 pendlere, mens Sunnhordlandsregionen og Ullensvang har 2575 pendlere. Om vi ser begge regionene samlet, øker antall pendlere med totalt 3311 arbeidstakere. Det vil si at det er 3311 stykker som pendler på tvers av regionene.
Utsira har ikke inn- eller utpendlere til Sunnhordland. Bortsett fra en person som pendler til Sveio har heller ikke Bokn utpendling til Sunnhordland.
Haugesund er den kommunen som har flest pendlere inn til kommunen. De ligger langt foran de andre kommunene når det er snakk om pendling inn til kommunene. Karmøy er den kommunen som har flest innbyggere som pendler ut av kommunen.
Videre kan man se på de systematiske forskjellene sett i forhold til sentralitet og tilgjengelighet i det lokale arbeidsmarkedet.
Haugesund, Karmøy og Stord er sentrale kommuner hvor det finnes en stor andel arbeidsplasser og tilgjengeligheten i arbeidsmarkedet er større enn i eksempelvis Sauda, Utsira, Tysnes eller Ullensvang. De sentraliserte kommunene har en fordel i forhold til å skape klynger, det med tanke på at når flere mennesker bosetter seg i samme område kan en dra nytte av kompetansen de innehar. Sauda, Utsira, Tysnes og Ullensvang er eksempler på kommuner i utkanten av regionene. De befinner seg såpass langt utenfor at de ikke vil dra nytte av sentralitet.
I figur 3 og 4 vises det at de siste 10 årene har Haugesund hatt en reduksjon i antall ansatte, men Karmøy, Vindafjord og Tysvær har hatt en markant økning i antall arbeidstakere. Det vi vet er at det har utviklet seg større næringsklynger utenfor Haugesund de siste årene som kan ha en sammenheng med økning i antall ansatte. Samtidig har oljebransjen i samme periode slitt med nedgangstider som påvirker både Haugesund og Stord. Disse kommunene har en del oljebaserte næringer og i de periodene oljemarkedet svinger vil arbeidsmarkedet vise markant nedgang i antall arbeidsplasser. Det vil også vise en betydelig økning i antall arbeidsplasser om det er oppgangstider. Oppgangstider i oljenæringen gir en økning av pendlere inn til kommuner som har virksomheter innenfor oljenæringen.
LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgbGlicmFyeShrYWJsZUV4dHJhKQogIG9wdGlvbnMoc2NpcGVuID0gOTk5KQogIH0pCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLCBpbmNsdWRlID0gVFJVRSkKYGBgCgojIFJvbWxpZ2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyLCB2aXJrbmluZ2VyIGF2IGVrc29nZW5lIHNqb2trIGkgYmFzaXNzeXNzZWxzZXR0aW5nZW4sIG9nIGxva2FsZSBmb3Jza2plbGxlciBJIHN5c3NlbHNldHRpbmdzdmVrc3QuCgpJIGRlbm5lIG9wcGdhdmVuIHZpbCB2aSBzZSBww6UgbsOmcmluZ3NzdHJ1a3R1cmVyIHDDpSBIYXVnYWxhbmRldCwgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcuCgpQcm9ibGVtc3RpbGxpbmdlciBvZyBiZXJlZ25pbmdlciB2aSB2aWwgc2UgbsOmcm1lcmUgcMOlCgotICAgQmVza3JpdmUgc2l0dWFzam9uZW4gc2xpayBkZW4gZXIgZm9yIDIwMjAsIG9nIGZvciB1dHZpa2xpbmdlbiBvdmVyIHRpZC4KLSAgIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCi0gICBBbmRlbGVuIGF2IHN5c3NlbHNldHRpbmdlbiBpbm5lbmZvciBlbmtlbHRuw6ZyaW5nZXIsIG9nIHNhbW1lbmxpZ25lIHNpdHVhc2pvbmVuIG9nIHV0dmlrbGluZ2VuIGZvciBsb2thbGUga29tbXVuZXIgb2cgbG9rYWwgcmVnaW9uIG1lZCBkZXQgc29tIGdqZWxkZXIgZm9yIG5hc2pvbmVuIHNhbWxldC4KLSAgIEJlcmVnbmUgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyLCBvZyBmb3IgcmVnaW9uZW4oZSkgc2FtbGV0LgotICAgQmVyZWduZSB1bGlrZSBhZ2dyZWdlcmluZ3NuaXbDpWVyIGF2IG7DpnJpbmdlciBvZyBnZW9ncmFmaSwgaWRlbnRpZmlzZXIgbXVsaWdlIGtseW5nZXIgYmFzZXJ0IHDDpSB2ZXJkaWVuZSBmb3IgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZW5lLgotICAgR2rDuHJlIGVuIHZ1cmRlcmluZyBhdiBodm9yIGtvbnNlbnRyZXJ0L3NwcmVkdCBlbiBuw6ZyaW5nIGVyIGZvcmRlbHQgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBiYXNlcnQgcMOlIGJlcmVnbmluZ2VyIGF2IGRlbiByb21saWdlIEdpbmktaW5kZWtzZW4uCi0gICBWdXJkZXJlIG9tIHNhbW1lbmxpZ25pbmdzZ3J1bm5sYWdldCBiw7hyIHbDpnJlIHNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4sIGVsbGVyIHNhbWxldCBzeXNzZWxzZXR0aW5nIGF2IG5hc2pvbmVuLCBvZyBmaW5uZSB1dCBodmlsa2VuIHJvbGxlIGRldCBzcGlsbGVyIG9tIGVuIGJydWtlciByZWdpb25hbGUgZWxsZXIgbmFzam9uYWxlIGFuc2xhZyBmb3Igc2FtbGV0IHN5c3NlbHNldHRpbmcuCi0gICBGaW5uZSB1dCBvbSBuw6ZyaW5nc3N0cnVrdHVyZW4gaSByZWdpb25lbiBoYXIgYmxpdHQgbWVyIGVsbGVyIG1pbmRyZSBkaXZlcnNpZmlzZXJ0LCBtYW5nZm9sZGlnLCBvdmVyIHRpZC4KLSAgIEJlcmVnbmUgZW4gcmVnaW9uYWwgbWFuZ2ZvbGQtaW5kZWtzIG9nIGZpbm5lIHV0IGh2b3JkYW4gdmVyZGllbmUgcMOlIGVuIHNsaWsgaW5kZWtzIGVyIGVuZHJldCBvdmVyIHRpZC4KLSAgIFZ1cmRlcmUgb20gc3lzc2Vsc2V0dGluZ3NhbmRlbGVuZSBza2FsIHNhbW1lbmxpZ25lcyBtZWQgbmFzam9uYWxlIGVsbGVyIHJlZ2lvbmFsZSBhbmRlbGVyIGZvciBkZSB1bGlrZSBuw6ZyaW5nZW5lCi0gICBHamVudGEgYmVyZWduaW5nZXIgZm9yIGFuZGVsZXIgYXYgYXJiZWlkc3Rha2VyZSBpIHVsaWtlIG7DpnJpbmdlciwgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIsIGRlbiByb21saWdlIEdpbmktIGtvZWZmaXNpZW50ZW4gb2cgbcOlbGV0IGZvciBtYW5nZm9sZCBhdiBuw6ZyaW5nZXIsIG1lZCB1dGdhbmdzcHVua3QgaSBkYXRhIHNwZXNpZmlzZXJ0IGV0dGVyIGFyYmVpZHN0YWtlcm5lcyBib3N0ZWQuCi0gICBTYW1tZW5saWduZSByZXN1bHRhdGVuZSBmb3IgZGF0YSBldHRlciBhcmJlaWRzc3RlZCwgb2cga29tbWVudGVyIGh2aWxrZW4gaW5mb3JtYXNqb24gcmVzdWx0YXRlbmUgZ2lyIG9tIHJvbWxpZyBtb2JpbGl0ZXQgaSBhcmJlaWRzbWFya2VkZXQuCi0gICBHaSBlbiBrb3J0IG92ZXJzaWt0IG92ZXIgcGVuZGxlcnN0csO4bW1lciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4KLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgbWVkIGJvc3RlZCBpIGVuIGtvbW11bmUgc29tIGhhciBhcmJlaWRzc3RlZCBpIGFuZHJlIGtvbW11bmVyLCBvZyBnasO4ciBkZXQgc2FtbWUgZm9yIGFuZGVsZW4gYXYgam9iYmVuZSBpIGVuIGtvbW11bmUgc29tIGVyIGJlc2F0dCBhdiBhcmJlaWRzdGFrZXJlIGZyYSBhbmRyZSBrb21tdW5lci4KLSAgIERpc2t1dGVyZSBmb3Jza2plbGxlciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4sIG9nIGRyw7hmdCB1dHZpa2xpbmdlbiBvdmVyIHRpZCBmb3IgdWxpa2Uga29tbXVuZXIKLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVuIGF2IGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaW5uZW5mb3Igc2FtbWUga29tbXVuZS4gU2Ugb20gZGV0IGVyIHN5c3RlbWF0aXNrZSBmb3Jza2plbGxlciBzZXR0IGkgZm9yaG9sZCB0aWwgc2VudHJhbGl0ZXQgb2cgdGlsZ2plbmdlbGlnaGV0IGkgZGV0IGxva2FsZSBhcmJlaWRzbWFya2VkZXQuIE9nIG9tIGRldCBlciBiZXN0ZW10ZSB0cmVuZGVyIGkgdXR2aWtsaW5nZW4gZm9yIHVsaWtlIGtvbW11bmVyLgotICAgQnJ1a2UgYmVyZWduaW5nZW5lIGF2IGxva2FsaXNlcmluZ2t2b3RpZW50ZXIgdGlsIMOlIGRlbGUgbsOmcmluZ2VuZSBpbm4gaSBsb2thbC0gb2cgYmFzaXNuw6ZyaW5nZXIKLSAgIEZvcm11bGVyZSBlbiDDuGtvbm9taXNrIGJhc2Vtb2RlbGwgb2cgYmVyZWduZSDDuGtvbm9taXNrZSBiYXNlbXVsaXBsaWthdG9yZXIgZm9yIGVua2VsdGtvbW11bmVyIG9nIHJlZ2lvbihlcikuCi0gICBWdXJkZXJlIGxva2FsZSB2aXJrbmluZ2VyIGF2IGFsdGVybmF0aXZlIGxva2FsaXNlcmluZ2VyIGkgT2RkYSwgSHVzbmVzIG9nIExlaXJ2aWsKLSAgIERyw7hmdGUgdmlya25pbmdlciBhdiBldCBzbGlrdCBwb3NpdGl2dCBla3NvZ2VudCBzam9rayBmb3IgZGVuIGxva2FsZSDDuGtvbm9taWVuIGdqZW5ub20gYnJ1ayBhdiBlbiBiYXNlbW9kZWxsCi0gICBGaW5uZSB1dCBodm9yZGFuIHZpcmtuaW5nZW5lIGV2ZW50dWVsdCBzcHJlcyB0aWwgYW5kcmUga29tbXVuZXIgaSByZWdpb25lbiBvZyBodm9yZGFuIGVuIGthbiBicnVrZSBkYXRhIGZvciBwZW5kbGVzdHLDuG1tZXIgdGlsIMOlIHByZWRpa2VyZSB2aXJrbmluZ2VyIHDDpSBzeXNzZWxzZXR0aW5nZW4gaSB1bGlrZSBrb21tdW5lci4KLSAgIFNhbW1lbmxpZ25lIGRpc3NlIHByZWRpa3Nqb25lbmUgbWVkIGRlIHZpIGbDpXIgbsOlciB2aSBnamVubm9tZsO4cmVyIGFuYWx5c2VuIHDDpSByZWdpb25hbHQgbml2w6UuCi0gICBHaSBlbiBzaGlmdC1zaGFyZSBhbmFseXNlIGkgZW4gZGlza3Vzam9uIGF2IGZvcnNramVsbGVyIGkgdmVrc3QgZm9yIGVrc2VtcGVsIG1lbGxvbSBpbmRyZSwgbWlkdHJlIG9nIHl0cmUgZGVsZXIgYXYgcmVnaW9uZW4sIGVsbGVyIGV2ZW50dWVsdCBvbXLDpWRlci9rb21tdW5lciBzb20gaGFyIGhhdHQgc3Rlcmsgb2cgc3ZhayBiZWZvbGtuaW5nc3V0dmlrbGluZy4KCiMjIE92ZXJzaWt0IG92ZXIgYmVmb2xrbmluZ2VuZSBpIHJlZ2lvbmVuZQoKIyMjIEhhdWdhbGFuZGV0CgpIYXVnYWxhbmRldCBiZXN0w6VyIGF2IGtvbW11bmVuZSBCb2tuICg4NTIpLCBIYXVnZXN1bmQgKDM3MzU3KSwgS2FybcO4eSAoNDIxODYpLCBTYXVkYSAoNDU5NSksIFR5c3bDpnIoMTEwNjUpLCBVdHNpcmEoMTk4KSBvZyBWaW5kYWZqb3JkKDg3MTQpLgp0aWxzYW1tZW4gYm9yIGRldCAxMDQ5NjcgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KaSB0aWRzcGVyaW9kZW4gdmkgaGFyIGhlbnRldCBpbm4gZGF0YSBoYXIgZGV0IHZlcnQga29tbXVuZXNhbW1lbnNsw6VpbmcgaSBkZW5uZSByZWdpb25lbi4KRGEgYmxlIMOYbGVuIG9nIHZpbmRhZmpvcmQgc2zDpXR0IGkgc2FtbWVuIHRpbCBlbiBrb21tdW5lIChodm9yZGFuIGhhciB2aSB0YXR0IGhlbnN5biB0aWwgZGV0dGU/Pz8pCgojIyMgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcKClN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nIGJlc3TDpXIgYXYga29tbXVuZW5lIELDuG1sbygxMTk1NyksIEV0bmUoNDA2MiksIEZpdGphcigzMTg5KSwgS3Zpbm5oZXJhZCgxMzA3MSksIFN0b3JkKDE4NzU5KSwgU3ZlaW8oNTc2NiksIFR5c25lcygyODY5KSBvZyBVbGxlbnN2YW5nKDExMDQ4KS4KVGlsc2FtbWVuIGJvciBkZXQgNzA3MjEgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KClRhbGxlbmUgZXIgaGVudGV0IGZyYSBTU0IgMDkuMDEuMjEgKDxodHRwczovL3d3dy5zc2Iubm8vc3RhdGJhbmsvdGFibGUvMDEyMjMvdGFibGVWaWV3TGF5b3V0MS8+KSBnamVsZGVyIGZvciA0IGt2YXJ0YWwgMjAyMC4KCiJGb3JrbGFyIGxpdHQgb20gZGUgZm9yc2tqZWxsaWdlIG7DpnJpbmdlbmUiLi4uLi4gCgpgYGB7ciBjc3ZfZmlsZXJ9CnN5c3NlbF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYXJiIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zdW5fYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzeXNzZWxfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL3N5c3NlbF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGxkX2JvcyA8LSByZWFkX2NzdigiRGF0YS9obGRfYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoYXJfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hhcl9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGdsX1BlbmRsaW5nIDwtIHJlYWRfY3N2KCJEYXRhL2hnbF9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmBgYAoKIyAxIFN5c3NlbHNldHRpbmcgaSB1bGlrZSBuw6ZyaW5nZXIsIGV0dGVyIGFyYmVpZHNzdGVkCgojIyBIYXVnYWxhbmRldAoKRsO4cnN0ZSByZWdpb25lbiB2aSB2ZWxnZXIgw6Ugc2UgcMOlIGVyIEhhdWdhbGFuZGV0LgpIZXIgw7huc2tlciB2aSDDpSBzZSBww6UgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAsIGF2IGFudGFsbCBhbnNhdHRlIGkgc2luIGhlbGhldCBpIHJlZ2lvbmVuLCBzYW10IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZS4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTogSGF1Z2FsYW5kZXQiKSsKICB5bGFiKCJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpJIDIwMjAgZXIgZGV0IGkgdW5kZXJrYW50IGF2IDUwIDAwMCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIEhhdWdhbGFuZGV0LgpBdiBGaWcuCjEgc2VyIHZpIGF0IEhhdWdhbGFuZGV0IGZpa2sgZW4gbmVkZ2FuZyBpIGFudGFsbCBhbnNhdHRlIGkgMjAxNSBvZyAyMDE2LgpJIDIwMTcgb2cgMjAxOCBibGUgZGV0IHZla3N0LCBmcmVtIHRpbCBkZXQgc251ZGRlIGkgMjAxOSBpZ2plbi4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDExMDYsIDExMzUsIDExNDUsIDExNDYsIDExNDksIDExNTEsIDExNjApKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IGBBbGxlIE7DpnJpbmdlcmAsIChhbmdsZT0wKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjogSGF1Z2FsYW5kZXQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpJIEZpZy4KMiBzZXIgdmkgYXQgZmxlcmUgYXYga29tbXVuZW5lIHDDpSBIYXVnYWxhbmRldCBoYXIgaGF0dCBsaXRlbiBhcmJlaWRzcGxhc3N2ZWtzdCwgbWVkIHVubnRhayBhdiBUeXN2w6ZyLCBWaW5kYWZqb3JkIG9nIEthcm3DuHkgaSBkZW4gc2lzdGUgdGnDpXJzcGVyaW9kZW4uClZpIHNlciBkZXR0ZSBtZXIgdHlkZWxpZyBww6UgZmlnLgozIG9nIDQuCgpgYGB7ciBobGRfYXJiX2xvbmd9CmhsZF9hcmJfbG9uZyA8LSBzeXNzZWxfYXJiICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzRfTWluc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA0OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpGaWd1ciAzIG9nIDQgdmlzZXIgdXR2aWtsaW5nZW4gYXYgZGV0IHRvdGFsZSBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIHDDpSBrb21tdW5hbHQgbml2w6UsIGlubmVuZm9yIEhhdWdhbGFuZC1yZWdpb25lbi4KCkkgZGlzc2UgZmlndXJlbmUsIHPDpSBzZXIgdmkgdHlkZWxpZyBhdCBIYXVnZXN1bmQgaGFyIGhhdHQgcmVkdWtzam9uIGkgYW50YWxsIGFuc2F0dGUgdG90YWx0IHNldHQsIG1lbnMgS2FybcO4eSwgVmluZGFmam9yZCBvZyBUeXN2w6ZyIGhhciBoYXR0IGVuIG1hcmthbnQgdmVrc3QgZGUgc2lzdGUgdGkgw6VyZW5lLgpTaWRlbiBIYXVnZXN1bmQgaGFyIGZsZXN0IGFyYmVpZHNwbGFzc2VyIGJldHlyIHV0dmlrbGluZ2VuIGkgSGF1Z2VzdW5kIG15ZSBmb3IgZGUgc2FtbGVkZSB0YWxsZW5lLgoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDU6IEhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDY6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgNSBvZyA2IHZpc2VyIHV0dmlrbGluZ2VuIGF2IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIEhhdWdhbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZSBuaXbDpS4KClZpIHNlciBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsIEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIHV0Z2rDuHIgbsOmcmluZ2VuZSBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIG9nIEluZHVzdHJpIGRlIHN0w7hyc3RlLgpIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIGhhciB2b2tzdCBqZXZudCBvZyB0cnV0dCBkZSBzaXN0ZSB0acOlcmVuZSwgbWVucyBhbnRhbGwgYW5zYXR0ZSBpIGluZHVzdHJpbsOmcmluZ2VuIGhhciB2YXJpZXJ0IGZyYSBrb21tdW5lIHRpbCBrb21tdW5lLgpJIEhhdWdhbGFuZGV0IHV0Z2rDuHIgcHJpbcOmcm7DpnJpbmdlciAoam9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlKSBlbiBzdMO4cnJlIGFuZGVsLCBlbm4gaG9zIEthcm3DuHkgb2cgSGF1Z2VzdW5kIGh2b3IgcHJpbcOmcm7DpnJpbmdlbmUga3VuIHV0Z2rDuHJlIGVuIGxpdGVuIGFuZGVsLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZXIgcmVsYXRpdnQgc3RvcmUga29tbXVuZXZpc2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyZW4uClJvZ2FsYW5kIGhhciBlbiBmb3Job2xkc3ZpcyBlbnNpZGlnIG7DpnJpbmdzc3RydWt0dXIsIG9samUgb2cgZ2FzcyBlciBkb21pbmVyZW5kZS4KRnlsa2V0IGVyIHN1dmVyZW50IGRvbWluZXJlbmRlIGZvciBmb3NzaWwgZW5lcmdpLgpEZSBoYXIgZm9yIMO4dnJpZyBkZSBzaXN0ZSDDpXJlbmUgc2F0c2V0IHDDpSBldCBlbiBtZXIgZGlmZmVyZW5zaWVydCBuw6ZyaW5nc3N0cnVrdHVyIG9nIG7DpnJpbmdzbGl2IHZlZCDDpSBzYXRzZSBww6UgaGVsc2UsIElLVCBvZyBmb3JueWJhciBlbmVyZ2kuCgpJIHbDpXJlIG1vZGVsbGVyLCBlciBzYXRzaW5nZW4gcMOlIGhlbHNlIGRlbiBtZXN0IHR5ZGVsaWdlLgpBdiByZW50IHRla25pc2tlIGdydW5uZXIgZXIgZGV0IHZhbnNrZWxpZyDDpSBzZSB1dHZpa2xpbmdlbiBpIGVua2VsdGUgbsOmcmluZ2VyIHNvbSB1dGdqw7hyIHNtw6UgYW5kZWxlciwgcMOlIGdydW5uIGF2IHNrYWxhZW4gc29tIGVyIGJlbnl0dGV0LgpUaWwgdHJvc3MgZm9yIGRldHRlLCBrYW4gbWFuIHNlIGF0IG7DpnJpbmdzc3RydWt0dXJlbiBpIHJlZ2lvbmVuIHNhbWxldCBnZW5lcmVsdCBzZXR0IGhhciBlbmRyZXQgc2VnIGxpdGUuCgpSb2dhbGFuZCBoYXIgZ29kZSBqb3JkYnJ1a3NtdWxpZ2hldGVyLCBtZW4gaSBGaWcuCjI6IEhhdWdhbGFuZGV0IHNlciB2aSBlbiBuZWRnYW5nIGkgc3lzc2Vsc2V0dGluZ2VuIGRlIHNpc3RlIHRpw6VyZW5lLCBtZW5zIGRldCBlciBlbiBtYXJnaW5hbCDDuGtuaW5nIGkgU3VubmhvcmRhbGFuZCwgamYuCkZpZyA5LgpJIEZpZy4KMTI6IHNlciB2aSBhdCBUeXNuZXMgaGFyIGhhdHQgZW4gbWFya2FudCDDuGtuaW5nIGkgcHJpbcOmcm7DpnJpbmdlbiwgcmVsYXRpdnQgc2V0dC4KClVuaXZlcnNpdGV0cy0gb2cgaMO4Z3Nrb2xlc2VrdG9yZW4gZXIgbGl0ZW4gaSBSb2dhbGFuZCwgb2cgZGVuIGJlc3TDpXIgZm9yIGRldCBmw7hyc3RlIGF2IFVuaXZlcnNpdGV0ZXQgaSBTdGF2YW5nZXIgKFVpUykgb2cgSMO4Z3NrdWxlbiBww6UgVmVzdGxhbmRldCAoSFZMKSBtZWQgY2FtcHVzIEhhdWdlc3VuZC4KCkhhdWdhbGFuZCBWZWtzdCwgc29tIGVyIGVpZ2QvZHJldmV0IGF2IEhhdWdhbGFuZHNyZWdpb25lbiBlciBpIHNwaXNzZW4gcMOlIMOlIGxlZ2dlIHRpbCByZXR0ZSBmb3Igw6UgZXRhYmxlcmUgbnkgaW5kdXN0cmkgc2FtdCBhbmRyZSBhcmJlaWRzcGxhc3NlciBpIHJlZ2lvbmVuLgoKSSBoZWxzZXNla3RvcmVuIGVyIFN0YXZhbmdlciB1bml2ZXJzaXRldHNzeWtlaHVzIChTdVMpIHNlbnRyYWx0LgoKIyMgU3VubmhvcmRsYW5kCgpWaWRlcmUgw7huc2tlciB2aSDDpSBzZSBww6UgZGVuIHNhbW1lIHV0dmlrbGluZ2VuLCBtZW4gZGVubmUgZ2FuZ2VuIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzF9CnN1bl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNzogU3VubmhvcmRhbGFuZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKSGVyIHZpc2VyIGZpZ3VyIDcgdXR2aWtsaW5nZW4gdGlsIGRlbiB0b3RhbGUgc3VtbWVuIGF2IGFuc2F0dGUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuClN1bm5ob3JkYWxhbmQgaGFyIGkgMjAyMCBpIHVuZGVya2FudCBhdiAyNSA1MDAgYW5zYXR0ZS4KVmkgc2VyIHV0IGlmcsOlIGZpZ3VyZW4gYXQgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGhhZGRlIGVpbiBtYXJrYW50IHZla3N0IGlmcsOlIDIwMDggdGlsIDIwMTQgbWVkIHBlcmlvZGFyIG1lZCBzdmFrIG5lZGdhbmcuCkZyYSAyMDE0IGhhciBkZXQgdsOmcnQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFudGFsbCBhbnNhdHRlLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTEsIDQ2MTIsIDQ2MTMsIDQ2MTQsIDQ2MTUsIDQ2MTYsIDQ2MTcpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiRmlnLiA4OiBTdW5uaG9yZGxhbmQiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpGaWd1ciA4IHZpc2VyIHV0dmlrbGluZ2VuIGF2IHRvdGFsdCBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIHDDpSBrb21tdW5lbml2w6UgaSBoZWxlIHJlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLgpEZW5uZSBmaWd1cmVuIGdpciBvc3MgZW4gb3ZlcnNpa3QsIG1lbiBlciBpa2tlIGhlaWx0IGJydWtlcnZlbm5lbGlnLgpWaSBsYWdlciBkZXJtZWQgZW4gbWVyIG92ZXJzaWt0bGlnIGZpZ3VyLCBqZi4KZmlndXIgOSAmIDEwLgoKYGBge3Igc3VuX2FyYl9sb25nfQpzdW5fYXJiX2xvbmcgPC0gc3lzc2VsX2FyYiAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiS3Zpbm5oZXJhZCIsICJTdG9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA5OiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJGaXRqYXIiLCAiU3ZlaW8iLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEwOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGhhciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKVmkgc2VyIGhlciB1dCBpZnJhIGZpZ3VyIDkgb2cgMTAgdXR2aWtsaW5nZW4gZm9yIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmQgdG90YWx0IHNldHQsIG9nIGhlciBzZXIgdmkgbXllIHR5ZGxpZ2VyZSB1dHZpa2xpbmdlbiBmcmEgMjAwOCB0aWwgMjAyMC4KRW4ga2FuIHNlIGhlciBhdCBLdmlubmhlcmFkLCBFdG5lIG9nIEZpdGphciBoYXIgaGF0dCBlbiByZWR1a3Nqb24gaSB0b3RhbHQgYW5zYXR0ZSwgbWVucyBUeXNuZXMgb2cgU3ZlaW8gaGFyIGhhdHQgZWluIGtyYWZ0aWcgdmVrc3QuCkVuIGludGVyZXNzYW50IGJlbWVya2luZyBlciBTdG9yZCBpIDIwMTQgb2cgS3Zpbm5oZXJhZCBmcmEgMjAwOCB0aWwgMjAxNy4KCkZvciDDpSBmw6UgZXQgYmVkcmUgb3ZlcnNpa3Qgb3ZlciB1dHZpa2xpbmdlbiBpIGtvbW11bmVuIMO4bnNrZXIgdmkgw6Ugc2UgcMOlIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIga29tbXVuZS4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9BcmJlaWRzc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiU3RvcmQiLCAiS3Zpbm5oZXJhZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDExOiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJTdmVpbyIsICJGaXRqYXIiLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTI6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0amFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgMTEgb2cgMTIgdmlzZXIgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lIGkgaHZlciBlbmtlbHQga29tbXVuZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4KCkVuIHNlciB1dCBpZnJhIGZpZ3VyIDExIGF0IGkgZGUgdHJlIHN0w7hyc3RlIGtvbW11bmVuZSwgKkLDuG1sbyosICpLdmlubmhlcmFkKiBvZyAqU3RvcmQqIHPDpSBoYXIgZGUgYWxsZSBoYXR0IGVuIHJlZHVrc2pvbiBpIGluZHVzdHJpZW4sIHNhbXRpZGlnIHNvbSBkZSBoYXIgaGF0dCBlbiB2ZWtzdCBpIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIuClR5c25lcyBoYXIgdsOmcnQgc3RhYmlsIG7DpXIgZGV0IGtvbW1lciB0aWwgaW5kdXN0cmksIG1lbiBoYXIgc2V0dCBlaW4gbWFya2FudCB2ZWtzdCBpIHByaW3DpnJuw6ZyaW5nZW4gKEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZSkuCgojIyMgU3lzc2Vsc2V0dGluZ3N1dHZpa2xpbmdlbiBmb3IgdWxpa2UgbsOmcmluZ2VyIGkgdWxpa2Uga29tbXVuZXIgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldC4KCkRldCBmw7hyc3RlIGJlbWVya2Vsc2VzdmVyZGlnZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBlciBkZW4gbWFya2FudGUgcmVkdWtzam9uZW4gaSBpbmR1c3RyaSBpIFN0b3JkIGtvbW11bmUgaSAyMDE0LCBzYW10IEt2aW5uaGVyYWQgZnJhIDIwMDguCkRldHRlIHN0ZW1tZXIgb3ZlcmVucyBtZWQgdG8gaGVuZGVsc2VyLgpEZW4gZsO4cnN0ZSBlciBvbGpla25la2tlbiBpIDIwMTQgc29tIG1lZGbDuHJ0ZSBhdCBibC5hLgpBa2VyIFN0b3JkIEFTIHNvbSBlciBhdmhlbmdpZyBhdiBPbGplLWluZHVzdHJpZW4gbcOldHRlIHBlcm1pdGVyZS4KClN0b3JkIGVyIGVuIGtvbW11bmUgc29tIGhhciBteWUgb2Zmc2hvcmUgaW5kdXN0cmkuCkkgMjAwOC8yMDA5IHPDpSBzdGVuZ3RlIFPDuHItTm9yZ2UgQWx1bWluaXVtICJCLUhhbGxlbiIgc29tIG1lZGbDuHJ0ZSA1MCUgcmVkdWtzam9uIGkgcHJvZHVrc2pvbiwgb2cgZGVybWVkIGFuc2F0dGUuCkludGVyZXNzYW50IMOlIGJlbWVya2UgYXQgaSBLdmlubmhlcmFkIHPDpSBlciBhbnRhbGwgaW5kdXN0cmlhcmJlaWRlcmUgcmVkdXNlcnQgc2FtdGlkaWcgc29tIGFudGFsbCBhbnNhdHRlIGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgw7hrdC4KQsO4bWxvIGhhciBvZ3PDpSBzZXR0IGVuIHN0YWJpbCByZWR1a3Nqb24gaSBhbnNhdHRlIGlubmVuIGluZHVzdHJpLCBzYW10IHZla3N0IGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgZnJlbSB0aWwgMjAxOC4KClNlciBlbiBww6UgaGVsZSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gaSBzaW4gaGVsaGV0LCBzw6Ugc2VyIHZpIGVuIHN2w6ZydCB0eWRlbGlnIHZla3N0IGlubmVuIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyLCBvZyByZWR1a3Nqb24gaW5uZW4gaW5kdXN0cmkgaSBoZWxlIHJlZ2lvbmVuLgpLdmlubmhlcmFkLCBUeXNuZXMgb2cgRml0amFyIGhhciBvcHBsZXZkIGVpbiBtYXJrYW50IHZla3N0IGlubmVuIHByaW3DpnJuw6ZyaW5nLgoqKkthbiBkZXQgdmVyZSBlaW4gZ3J1bm4gdGlsIGRldHRlIHNvbSBidXJkZSBkaXNrdXRlcmFzdD8/KioKCiMgRm9ydHNldHQgSGVyIChPQSwgS0gpCgojIyBIYXJkYW5nZXIKClRpbCBzbHV0dCBtw6UgdmkgZ2plcmUgZGV0IHNhbW1lIG1lZCAqSGFyZGFuZ2VyKgoKSSBoZW5ob2xkIHRpbCBvcHBnYXZlbnMga3JhdiB0aWwgYmV0cmFrdGVyIHZpICpIYXJkYW5nZXIqIGbDuHIgMjAxOSBzb20gVWxsZW5zdmFuZy0gb2cgT2RkYSBrb21tdW5lIHNvbSB0byBzZXBhcmVydGUga29tbXVuZXIuCmkgMjAyMCBzw6UgYmxlIFVsbGVuc3ZhbmcsIE9kZGEgb2cgSm9uZGFsIHNsw6V0dCBzYW1tZW4gdGlsIFVsbGVuc3ZhbmcuCkRldHRlIGZvcmtsYXJlciBkZW4gdm9sZHNvbW1lIMO4a25pbmdlbiBpIHN5c3NlbHNldHRpbmcgaSByZWdpb25lbiB2ZWQgdGlkc3B1bmt0ZXQgZm9yIGtvbW11bmVzYW1tZW5zbMOlaW5nLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGFyZGFuZ2VyXzF9Cmhhcl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClVsbGVuc3Zhbmcga29tbXVuZSBoYXIgc3RvciBrcmFmdHByb2R1a3Nqb24gb2cgaG92ZWRuw6ZyaW5nZW4gZXIgaW5kdXN0cmkuCk1ham9yaXRldGVuIGF2IGtyYWZ0cHJvZHVrc2pvbmVuIGZvcmVnw6VyIGkgdGlkbGlnZXJlIE9kZGEuCk9kZGEgZXIgZXQgZW5zaWRpZyBpbmR1c3RyaXN0ZWQsIG1lbiBoYXIgb2dzw6UgZW4gbWFyaXRpbSBuw6ZyaW5nIGkgdGlsbGVnZy4KSSBmaWd1ciAxNiBzZXIgdmkgYXQgaW5kdXN0cmluw6ZyaW5nZW4gdXRnasO4ciBlbiBiZXRyYWt0ZWxpZyBzdMO4cnJlIGFuZGVsIGF2IHN5c3NlbHNldHRpbmdlbiBpIGhlci4KSW5kdXN0cmluw6ZyaW5nZW4gZXIgb2dzw6Ugb21mYXR0ZXQgb2cgYnlnZy0gb2cgYW5sZWdnc3Zpcmtzb21oZXQuClDDpSBtb3RzYXR0IHNpZGUgZXIgam9yZGJydWssIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIgZG9taW5lcmVuZGUgaSBVbGxlbnN2YW5nLgoKKipHZW5lcmVsdCBvbSBVbGxlbnN2YW5nIGtvbW11bmUqKgoKVWxsZW5zdmFuZyBrb21tdW5lIChtZWQgT2RkYSkgaGFyIGhhdHQgZW4gamV2biBvZyBuZWdhdGl2IGJlZm9sa25pbmdzdmVrc3QgaSBtYW5nZSB0acOlci4KRGV0IGdqZW5zcGVpbGVzIGlra2UgdHlkZWxpZyBpIHbDpXJlIG1vZGVsbGVyIHDDpSBncnVubiBhdiBza2FsYWVuIHNvbSBlciBicnVrdC4KSSB0aWxsZWdnIGhhciB2aSBpa2tlIGhlbnN5bnRhdHQgaW5udmFuZHJlbmRlIGFyYmVpZGVyZSwgZWxsZXIgbWlkbGVydGlkaWdlIGZyYWZseXR0ZWRlIHNvbSBmb3IgZWtzZW1wZWwgc3R1ZGVudGVyLgoKIyAyIChEZXR0ZSBlciA+RUdFTlRMSUc8IHNpc3RlIGRlbCBhdiBvcHBnw6V2ZSAzLiBEZW5uZSBvZyBHaW5pL1JESSBmb3Igb3BwZ8OldmUgMyBiw7hyIGJsaSBieXR0YXN0IG9tKQoKRmlubmVyIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldAoKYGBge3J9CiNvcmRuZXIgZXR0ZXIga29tbXVuZW5hdm4gb2cgw6VyCnRtcCA8LSBzeXNzZWxfYm9zCmBgYAoKYGBge3J9CmhhdTIwIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihhYXIgPT0gIjIwMjAiLCBrbmF2biA9PSAiSGF1Z2VzdW5kIikKYGBgCgpgYGB7cn0KKGhhdTIwJEluZHVzdHJpL2hhdTIwJGBBbGxlIE7DpnJpbmdlcmApCjE5MDUvMTgxMzcKYGBgCgpgYGB7cn0KbHFfc3lzc2VsX2JvcyA8LSBzeXNzZWxfYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX2luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KbGlicmFyeShyZWFkeGwpCm5hc2pvbmFsdF9ib3N0ZWQgPC0gcmVhZF9leGNlbCgiRGF0YS9uYXNqb25hbHRfYm9zdGVkLnhsc3giKQpgYGAKCmBgYHtyfQpuYXNqb25hbHRfYm9zdGVkIDwtIG5hc2pvbmFsdF9ib3N0ZWQgJT4lIAogIG11dGF0ZShFaW5fRW5fSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaW5fRW5fSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaW5fRW5fVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCgpgYGB7cn0KTFFfYm9zX0pvcmRicnVrIDwtIGxxX3N5c3NlbF9ib3MlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9Kb3JkYnJ1aykgJT4lIAogIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAogIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYm9zdGVkLCBhYXIsIEVpbl9Fbl9Kb3JkYnJ1ayksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrCiAgKQoKTFFfYm9zX0luZHVzdHJpIDwtIGxxX3N5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfaW5kdXN0cmkpICU+JSAKICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2Jvc3RlZCwgYWFyLCBFaW5fRW5fSW5kdXN0cmkpLCBieSA9IGMoImFhciIpKSAlPiUgCiAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX2luZHVzdHJpL0Vpbl9Fbl9JbmR1c3RyaSkKCgpMUV9ib3NfVW5kZXJ2aXNuaW5nIDwtIGxxX3N5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfVW5kZXJ2aXNuaW5nKSAlPiUgCiAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9ib3N0ZWQsIGFhciwgRWluX0VuX1VuZGVydmlzbmluZyksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcpCgoKTFFfYm9zX0hlbHNlIDwtIGxxX3N5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfSGVsc2UpICU+JSAKICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2Jvc3RlZCwgYWFyLCBFaW5fRW5fSGVsc2UpLCBieSA9IGMoImFhciIpKSAlPiUgCiAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZSkKYGBgCgpgYGB7cn0Kc3lzc2VsX2JvcyA8LSBzeXNzZWxfYm9zICU+JSAKICBtdXRhdGUoTFFfYm9zX0pvcmRicnVrID0gTFFfYm9zX0pvcmRicnVrJGFuZGVsLAogICAgICAgICBMUV9ib3NfSW5kdXN0cmkgPSBMUV9ib3NfSW5kdXN0cmkkYW5kZWwsCiAgICAgICAgIExRX2Jvc19VbmRlcnZpc25pbmcgPSBMUV9ib3NfVW5kZXJ2aXNuaW5nJGFuZGVsLAogICAgICAgICBMUV9ib3NfSGVsc2UgPSBMUV9ib3NfSGVsc2UkYW5kZWwpCmBgYAoKYGBge3J9CkxRX2JvcyA8LSBzeXNzZWxfYm9zICU+JSAKICBzZWxlY3QoYWFyLCBrbmF2biwgTFFfYm9zX0pvcmRicnVrLCBMUV9ib3NfSW5kdXN0cmksIExRX2Jvc19VbmRlcnZpc25pbmcsIExRX2Jvc19IZWxzZSkKYGBgCgpgYGB7cn0KTFFfYm9zW2lzLm5hKExRX2JvcyldID0gMApgYGAKCgoKRm9yIHJlZ2lvbiBIYXVnYWxhbmQ6CgpgYGB7ciBobGRfYm9zX0Vpcl9Fcn0KaGxkX2Jvc19MUSA8LSBobGRfYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbm5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSm9yZGJydWsgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAoKICAgICAgICAgRWluX0VuX0VsX1Zhbm5fUmVubyA9IG5hc2pvbmFsdF9ib3N0ZWQkYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fQnlnZ19vZ19BbmxlZ2cgPSBuYXNqb25hbHRfYm9zdGVkJGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBuYXNqb25hbHRfYm9zdGVkJGBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZ2AvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX1VuZGVydmlzbmluZyA9IG5hc2pvbmFsdF9ib3N0ZWQkVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrLAogICAgICAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmksCiAgICAgICAgIExRX0VsX1Zhbm5fUmVubyA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubywKICAgICAgICAgTFFfQnlnZ19vZ19BbmxlZ2cgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnLAogICAgICAgICBMUV9GaW5hbnMgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMsCiAgICAgICAgIExRX1VuZGVydmlzbmluZyA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZywKICAgICAgICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlCikgJT4lIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9FbF9WYW5uX1Jlbm8sIExRX0J5Z2dfb2dfQW5sZWdnLCBMUV9GaW5hbnMsIExRX1VuZGVydmlzbmluZywgTFFfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYm9zX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXVnYWxhbmRldCI9OSkpCmBgYAoKCiMjIyBHSU5JIFJlZ2lvbmFsdG5pdsOlCiMjIyMgSGF1Z2FsYW5kZXQKCgpgYGB7cn0KaGxkX2Jvc19HSU5JIDwtIGhsZF9ib3MgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoaGxkX2JvcyRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKGhsZF9ib3MkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChobGRfYm9zJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpobGRfYm9zX0dJTkkgPC0gaGxkX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoaGxkX2JvcyRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoaGxkX2JvcyRJbmR1c3RyaSAvIGhsZF9ib3MkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGxkX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYm9zX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdhbGFuZGV0Ij04KSkKYGBgCgojIyMgR0lOSSBLb21tdW5hbHQgbml2w6UKIyMjIyBIYXVnZXN1bmQKCmBgYHtyfQpIYXVnX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTEwNiIpCmBgYAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gSGF1Z19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoSGF1Z19ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpIYXVnX2Jvc19HSU5JIDwtIEhhdWdfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoSGF1Z19ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEhhdWdfYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChIYXVnX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpIYXVnX2Jvc19HSU5JIDwtIEhhdWdfYm9zX0dJTkkgJT4lCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEhhdWdfYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBIYXVnX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEhhdWdfYm9zX0dJTkkkSW5kdXN0cmkgLyBIYXVnX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEhhdWdfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0hhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgSGF1Z19ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiSGF1Z2VzdW5kOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIEhhdWdfYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIEJva24KCmBgYHtyfQpCb2tuX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NSIpCmBgYAoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gQm9rbl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQm9rbl9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpCb2tuX2Jvc19HSU5JIDwtIEJva25fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQm9rbl9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEJva25fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEJva25fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChCb2tuX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEJva25fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCb2tuX2Jvc19HSU5JIDwtIEJva25fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhCb2tuX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhCb2tuX2Jvc19HSU5JJEluZHVzdHJpIC8gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhCb2tuX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9Cb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEJva25fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva246IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgQm9rbl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva24iPTExKSkKYGBgCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIFR5c3bDpnIKCmBgYHtyfQpUeXN2X2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NiIpCmBgYAoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gVHlzdl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoVHlzdl9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpUeXN2X2Jvc19HSU5JIDwtIFR5c3ZfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoVHlzdl9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFR5c3ZfYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIFR5c3ZfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChUeXN2X2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFR5c3ZfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpUeXN2X2Jvc19HSU5JIDwtIFR5c3ZfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhUeXN2X2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhUeXN2X2Jvc19HSU5JJEluZHVzdHJpIC8gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhUeXN2X2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9UeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIFR5c3ZfYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlR5c3bDpnI6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgVHlzdl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlR5c3bDpnIiPTExKSkKYGBgCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIEthcm3DuHkKCmBgYHtyfQpLYXJtX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0OSIpCmBgYAoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gS2FybV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS2FybV9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpLYXJtX2Jvc19HSU5JIDwtIEthcm1fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS2FybV9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEthcm1fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEthcm1fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChLYXJtX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEthcm1fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLYXJtX2Jvc19HSU5JIDwtIEthcm1fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhLYXJtX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhLYXJtX2Jvc19HSU5JJEluZHVzdHJpIC8gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhLYXJtX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9LYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEthcm1fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHk6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS2FybV9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHkiPTExKSkKYGBgCiMjIyBSZWdpb25hbHRuaXbDpSBTdW5uaG9yZGFsYW5kCgoKYGBge3Igc3VuX2Jvc19FaXJfRXJ9CnN1bl9ib3NfTFEgPC0gc3VuX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0pvcmRicnVrID0gbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCgogICAgICAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYm9zdGVkJGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gbmFzam9uYWx0X2Jvc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fRmluYW5zID0gbmFzam9uYWx0X2Jvc3RlZCRgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYm9zdGVkJFVuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX0pvcmRicnVrL0Vpbl9Fbl9Kb3JkYnJ1aywKICAgICAgICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkvRWluX0VuX0luZHVzdHJpLAogICAgICAgICBMUV9FbF9WYW5uX1Jlbm8gPSBFaXJfRXJfRWxfVmFubl9SZW5vL0Vpbl9Fbl9FbF9WYW5uX1Jlbm8sCiAgICAgICAgIExRX0J5Z2dfb2dfQW5sZWdnID0gRWlyX0VyX0J5Z2dfb2dfQW5sZWdnL0Vpbl9Fbl9CeWdnX29nX0FubGVnZywKICAgICAgICAgTFFfRmluYW5zID0gRWlyX0VyX0ZpbmFucy9FaW5fRW5fRmluYW5zLAogICAgICAgICBMUV9VbmRlcnZpc25pbmcgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcsCiAgICAgICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZQopICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfRWxfVmFubl9SZW5vLCBMUV9CeWdnX29nX0FubGVnZywgTFFfRmluYW5zLCBMUV9VbmRlcnZpc25pbmcsIExRX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoc3VuX2Jvc19MUSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvcmRicnVrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQnlnZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaW5hbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJ2LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkxva2Fsa3ZvdGllbnQsIHJlZ2lvbjogU3VubmhvcmRsYW5kIj05KSkKCmBgYAoKYGBge3J9CnN1bl9ib3NfR0lOSSA8LSBzdW5fYm9zICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKHN1bl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIHN1bl9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChzdW5fYm9zJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLSBzdW5fYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoc3VuX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBzdW5fYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0Kc3VuX2Jvc19HSU5JIDwtIHN1bl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKHN1bl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBzdW5fYm9zJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhzdW5fYm9zJEluZHVzdHJpIC8gc3VuX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoc3VuX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvc3VuX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShzdW5fYm9zX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJSZWdpb246IFN1bm5ob3JkbGFuZCI9OCkpCmBgYAoKCgoKIyMjIyBLb21tdW5hbGUgbml2w6UgaSBTdW5uaG9yZGxhbmQgCgojIyMjIyBTdG9yZAoKYGBge3J9ClN0b3JkX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxNCIpCmBgYAoKYGBge3J9ClN0b3JkX2Jvc19HSU5JIDwtIFN0b3JkX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhTdG9yZF9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpTdG9yZF9ib3NfR0lOSSA8LSBTdG9yZF9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChTdG9yZF9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gU3RvcmRfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChTdG9yZF9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gU3RvcmRfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChTdG9yZF9ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBTdG9yZF9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClN0b3JkX2Jvc19HSU5JIDwtIFN0b3JkX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoU3RvcmRfYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBTdG9yZF9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhTdG9yZF9ib3NfR0lOSSRJbmR1c3RyaSAvIFN0b3JkX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFN0b3JkX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9TdG9yZF9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBTdG9yZF9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3RvcmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgU3RvcmRfYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJTdG9yZDogIj0xMSkpCmBgYAoKCiMjIyMjIEt2aW5uaGVyYWQKCmBgYHtyfQpLdmlubl9ib3NfR0lOSSA8LSBzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTciKQpgYGAKCmBgYHtyfQpLdmlubl9ib3NfR0lOSSA8LSBLdmlubl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS3Zpbm5fYm9zX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KS3Zpbm5fYm9zX0dJTkkgPC0gS3Zpbm5fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS3Zpbm5fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEt2aW5uX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoS3Zpbm5fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIEt2aW5uX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoS3Zpbm5fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gS3Zpbm5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLdmlubl9ib3NfR0lOSSA8LSBLdmlubl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEt2aW5uX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS3Zpbm5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoS3Zpbm5fYm9zX0dJTkkkSW5kdXN0cmkgLyBLdmlubl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhLdmlubl9ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvS3Zpbm5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS3Zpbm5fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkt2aW5uaGVyYWQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS3Zpbm5fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJLdmlubmhlcmFkOiAiPTExKSkKYGBgCgojIyMjIyBCw7htbG8KCmBgYHtyfQpCw7htbG9fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjEzIikKYGBgCgpgYGB7cn0KQsO4bWxvX2Jvc19HSU5JIDwtIELDuG1sb19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQsO4bWxvX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkLDuG1sb19ib3NfR0lOSSA8LSBCw7htbG9fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQsO4bWxvX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCw7htbG9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChCw7htbG9fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIELDuG1sb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKELDuG1sb19ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBCw7htbG9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCw7htbG9fYm9zX0dJTkkgPC0gQsO4bWxvX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoQsO4bWxvX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQsO4bWxvX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKELDuG1sb19ib3NfR0lOSSRJbmR1c3RyaSAvIELDuG1sb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhCw7htbG9fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0LDuG1sb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBCw7htbG9fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkLDuG1sbzogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCw7htbG9fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJCw7htbG86Ij0xMSkpCmBgYAoKIyMjIyMgU3ZlaW8KCmBgYHtyfQpTdmVpb19ib3NfR0lOSSA8LSBzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTIiKQpgYGAKCmBgYHtyfQpTdmVpb19ib3NfR0lOSSA8LSBTdmVpb19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoU3ZlaW9fYm9zX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KU3ZlaW9fYm9zX0dJTkkgPC0gU3ZlaW9fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoU3ZlaW9fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIFN2ZWlvX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoU3ZlaW9fYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAtIFN2ZWlvX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoU3ZlaW9fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gU3ZlaW9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpTdmVpb19ib3NfR0lOSSA8LSBTdmVpb19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFN2ZWlvX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gU3ZlaW9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoU3ZlaW9fYm9zX0dJTkkkSW5kdXN0cmkgLyBTdmVpb19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhTdmVpb19ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvU3ZlaW9fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgU3ZlaW9fYm9zX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN2ZWlvOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFN2ZWlvX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3ZlaW86Ij0xMSkpCmBgYAoKCiMjIyBSZWdpbm9uYWx0IG5pdsOlIEhhcmRhbmdlcgoKYGBge3IgaGFyX2Jvc19FaXJfRXJ9Cmhhcl9ib3NfTFEgPC0gaGFyX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0pvcmRicnVrID0gbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCgogICAgICAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYm9zdGVkJGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gbmFzam9uYWx0X2Jvc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fRmluYW5zID0gbmFzam9uYWx0X2Jvc3RlZCRgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYm9zdGVkJFVuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX0pvcmRicnVrL0Vpbl9Fbl9Kb3JkYnJ1aywKICAgICAgICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkvRWluX0VuX0luZHVzdHJpLAogICAgICAgICBMUV9FbF9WYW5uX1Jlbm8gPSBFaXJfRXJfRWxfVmFubl9SZW5vL0Vpbl9Fbl9FbF9WYW5uX1Jlbm8sCiAgICAgICAgIExRX0J5Z2dfb2dfQW5sZWdnID0gRWlyX0VyX0J5Z2dfb2dfQW5sZWdnL0Vpbl9Fbl9CeWdnX29nX0FubGVnZywKICAgICAgICAgTFFfRmluYW5zID0gRWlyX0VyX0ZpbmFucy9FaW5fRW5fRmluYW5zLAogICAgICAgICBMUV9VbmRlcnZpc25pbmcgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcsCiAgICAgICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZQopICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfRWxfVmFubl9SZW5vLCBMUV9CeWdnX29nX0FubGVnZywgTFFfRmluYW5zLCBMUV9VbmRlcnZpc25pbmcsIExRX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGxkX2Jvc19MUSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvcmRicnVrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQnlnZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaW5hbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJ2LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkxva2Fsa3ZvdGllbnQsIHJlZ2lvbjogSGFyZGFuZ2VyIj05KSkKCmBgYAoKYGBge3J9Cmhhcl9ib3NfR0lOSSA8LSBoYXJfYm9zICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKGhhcl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIGhhcl9ib3MkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChoYXJfYm9zJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLSBoYXJfYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoaGFyX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBoYXJfYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KaGFyX2Jvc19HSU5JIDwtIGhhcl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKGhhcl9ib3MkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBoYXJfYm9zJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhoYXJfYm9zJEluZHVzdHJpIC8gaGFyX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGFyX2JvcyRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGFyX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAgJT4lCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShoYXJfYm9zX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJSZWdpb246IEhhcmRhbmdlciI9OCkpCmBgYAoKCiMjIyMgS29tbXVuYWxlIG5pdsOlIGkgSGFyZGFuZ2VyCgojIyMjIyBPZGRhCgpgYGB7cn0KbmFzam9fYm9zX3JlZCA8LSBuYXNqb25hbHRfYm9zdGVkICU+JSAKICBmaWx0ZXIoYWFyICVpbiUgYygyMDA4OjIwMTkpKQpgYGAKCmBgYHtyfQpPZGRhX2Jvc19HSU5JIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTIyOCIpCmBgYAoKYGBge3J9Ck9kZGFfYm9zX0dJTkkgPC0gT2RkYV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb19ib3NfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb19ib3NfcmVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb19ib3NfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoT2RkYV9ib3NfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpPZGRhX2Jvc19HSU5JIDwtIE9kZGFfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoT2RkYV9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb19ib3NfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gT2RkYV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvX2Jvc19yZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKE9kZGFfYm9zX0dJTkkkSW5kdXN0cmkvbmFzam9fYm9zX3JlZCRJbmR1c3RyaSAtIE9kZGFfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19ib3NfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChPZGRhX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19ib3NfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIE9kZGFfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19ib3NfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpPZGRhX2Jvc19HSU5JIDwtIE9kZGFfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhPZGRhX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gT2RkYV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19ib3NfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9fYm9zX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhPZGRhX2Jvc19HSU5JJEluZHVzdHJpIC8gT2RkYV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19ib3NfcmVkJEluZHVzdHJpIC8gbmFzam9fYm9zX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhPZGRhX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9PZGRhX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvX2Jvc19yZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvX2Jvc19yZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3QoIMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBPZGRhX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJPZGRhKC0yMDE5KTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBPZGRhX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiT2RkYSgtMjAxOSkiPTExKSkKYGBgCgojIyMjIyBVbGxlbnN2YW5nCgpgYGB7cn0KVWxsZW5fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE4IikKYGBgCgpgYGB7cn0KVWxsZW5fYm9zX0dJTkkgPC0gVWxsZW5fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKFVsbGVuX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClVsbGVuX2Jvc19HSU5JIDwtIFVsbGVuX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKFVsbGVuX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBVbGxlbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFVsbGVuX2Jvc19HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLSBVbGxlbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKFVsbGVuX2Jvc19HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFVsbGVuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KVWxsZW5fYm9zX0dJTkkgPC0gVWxsZW5fYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhVbGxlbl9ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIFVsbGVuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFVsbGVuX2Jvc19HSU5JJEluZHVzdHJpIC8gVWxsZW5fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoVWxsZW5fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL1VsbGVuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIFVsbGVuX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJVbGxlbnN2YW5nOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFVsbGVuX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVWxsZW5zdmFuZzoiPTExKSkKYGBgCgojIDMgU3lzc2Vsc2V0dGluZyBpIHVsaWtlIG7DpnJpbmdlciwgZXR0ZXIgYm9zdGVkIChNb2RlbGxlciB1bmRlciBhcmJlaWQpCgpOw6UgaGFyIHZpIHNldHQgcMOlIHV0dmlrbGluZ2VuIGF2IGh2b3IgbWFuZ2Ugc29tIGpvYmJlciBpIGtvbW11bmVuZSBldHRlciBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUsIGZyYSAyMDA4IHRpbCAyMDIwLCBpIHJlZ2lvbmVuZSBIYXVnYWxhbmRldCwgU3VubmhvcmRsYW5kIG9nIEhhcmRhbmdlci4gVmkgaGFyIG9nc8OlIHNldHQgcMOlIEdpbmkta29lZmZpc2llbnRlbmUgb2cgUkRJLXZlcmRpZW5lIHRpbCB1dHZhbGd0ZSBrb21tdW5lciBvZyBuw6ZyaW5nZXIsIHNhbXQgcHJvYmxlbXN0aWxsaW5nZW4gdmVkIGRpc3NlIHZlcmRpZW5lIGkgZm9yaG9sZCB0aWwgZGF0YWVuZSB2w6VyZXMgb2cgYWdncmVnZXJpbmdzbml2w6VldCB2aSBoYXIuCgpWaWRlcmUgc2thbCB2aSBuw6Ugc2UgcMOlIHV0dmlrbGluZ2VuIGZvciBodm9yIG1hbmdlIHNvbSBib3IgaSBkZSB1bGlrZSBrb21tdW5lbmUgaSByZWdpb25lbmUsIHNvbSBqb2JiZXIgaW5uZW5mb3IgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lLCBHaW5pLWtvZWZmaXNpZW50ZW5lIG9nIFJESS12ZXJkaWVuZSBmb3IgZGV0dGUuIFZpIGJlZ3lubmVyIG1lZCBIYXVnYWxhbmRldC4KCiMjIEhhdWdhbGFuZGV0CgpgYGB7ciBCb3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNzogSGF1Z2FsYW5kZXQiKSsKICB5bGFiKCJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpGaWd1cmVuIHZpc2VyIGF0IGRldCBlciBzdmluZ25pbmdlciBpIGFudGFsbCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgZm9yIHBlcmlvZGVuLCBtZWQgZXQgY2EuIEdqZW5ub21zbml0dCBmb3IgcGVyaW9kZW4gcMOlIDUxLjAwMCBhbnRhbGwgYm9zYXR0ZSBww6UgSGF1Z2FsYW5kZXQgc29tIGVyIHN5c3NlbHNhdHQgaSBhbGxlIG7DpnJpbmdlci4gU3ZpbmduaW5nZW5lIHZhcmllcmVyIGZyYSArLy0gMS41MDAgZnJhIGdqZW5ub21zbml0dGV0IGkgcGVyaW9kZW4sIGRldCBzZXIgbGlrZXZlbCB1dCB0aWwgYXQgc3ZpbmdlbmUgZXIgc3RhYmlsZSBvZyBub3JtYWxlIGV0dGVyc29tIGRldCB2aWwgdsOmcmUgbmF0dXJsaWcgbWVkIGhlbnN5biBww6UgYXQgbnllIGJlZHJpZnRlciBzdGFydGVyIG9wcCBpIHJlZ2lvbmVuLCBiZWRyaWZ0ZXIgc29tIGxlZ2dlciBuZWQgZWxsZXIgYmVkcmlmdGVyIHNvbSByZS1sb2thbGlzZXJlciBzZWcgZXQgYW5uZXQgc3RlZC4KCmBgYHtyIEJvc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDE4OiBIYXVnYWxhbmRldCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyZW4gdmlzZXIgZW4gb3ZlcnNpa3Qgb3ZlciBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIGV0dGVyIGtvbW11bmVyIHDDpSBIYXVnYWxhbmRldC4gRmlndXJlbiB2aXNlciBhdCBlbiByaW1lbGlnIHN0YWJpbCBvZyByZWxhdGl2dCBmbGF0IGt1cnZlIGZvciBrb21tdW5lbmUgVXRzaXJhIG9nIEJva24sIHNhbXQgZm9yIFNhdWRhIG9nIFZpbmRhZmpvcmQuIEZvciBUeXN2w6ZyIHZpc2VyIGZpZ3VyZW4gYXQgZGV0IGVyIGxpdHQgbWVyIHN2aW5nbmluZ2VyLCBtZW4gZGUgZXIgbGF2ZSBzZXR0IGkgZm9yaG9sZCB0aWwga29tbXVuZW5lIEthcm3DuHkgb2cgSGF1Z2VzdW5kLiBEZSB0byBzaXN0bmV2bnRlIGtvbW11bmVuZSBlciBkZSBzdMO4cnN0ZSBpIGRlbm5lIGZvcmJpbmRlbHNlbiBhdiBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyLCBvZyBkZSB2aWwgZGVyZm9yIG9nc8OlIHbDpnJlIG1lciB1dHNhdHQgZm9yIHN2aW5nbmluZ2VyIGJhc2VydCBww6UgYXQgYW50YWxsIGJlZHJpZnRlciBlciBsYW5ndCBow7h5ZXJlLCBvZyBkYSBtZWQgaGVuc3luIHDDpSBhdCBiZWRyaWZ0ZXIgc29tIHN0YXJ0ZXIgb3BwLCBsZWdnZXIgbmVkIGVsbGVyIHNvbSByZS1sb2thbGlzZXJlciBzZWcuIAoKRGV0IHZpIGltaWRsZXJ0aWQgc2VyIGVyIGF0IEhhdWdlc3VuZCBvZyBLYXJtw7h5IGVyIHPDpSBzdG9yZSBhdCBkZXQgcMOldmlya2VyIGh2b3JkYW4gZGUgbWluZHJlIGtvbW11bmVuZSBzb20gQm9rbiwgVHlzdsOmciwgU2F1ZGEgb2cgVXRzaXJhIGJsaXIgZnJlbXN0aWx0LiBWaSB2ZWxnZXIgZGVyZm9yIMOlIHNraWxsZSB1dCBkZSBzdG9yZSBvZyBtaW5kcmUga29tbXVuZW5lIGZvciBzZWcgc29tIHZpc3QgdmlkZXJlLgoKYGBge3IgaGxkX2Jvc19sb25nfQpobGRfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxOTogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkRlbm5lIGZpZ3VyZW4gc2FtbWVubGlnbmVyIGFudGFsbCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgZm9yIGtvbW11bmVuZSBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZC4gRmlndXJlbiB2aXNlciBhdCBpIMOlcmV0IDIwMTAsIGVyIGRldCBsYXZlc3RlIMOlcmV0IGZvciBwZXJpb2RlbiBzYW1sZXQgZm9yIGFsbGUgdHJlIGtvbW11bmVuZS4gVmlkZXJlIHZpc2VyIGRlbiBhdCDDpXJldCAyMDE0LCB2YXIgZGV0IGjDuHllc3RlIMOlcmV0IGZvciBwZXJpb2RlbiBzYW1sZXQgZm9yIGFsbGUgdHJlIGtvbW11bmVuZSwgb2cgbGlrZWRhbiB2aXNlciBmaWd1cmVuIGF0IGZyYSAyMDE0LCBoYXIgYWxsZSBrb21tdW5lbmUgZW4gbmVkZ2FuZyBmcmVtIHRpbCAyMDE1LTIwMTYgZsO4ciBkZSB0YXIgc2VnIG9wcCBpZ2plbiBpIDIwMTguIEFsbGUgdHJlIGtvbW11bmVuZSB2aXNlciBkZXQgc2FtbWUgbcO4bnN0ZXJldC4KCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjA6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpEZW5uZSBmaWd1cmVuIHZpc2VyIGFudGFsbCBhbnNhdHRlIGV0dGVyIGJvc3RlZCBpIGFsbGUgbsOmcmluZ2VyIGZvciBrb21tdW5lbmUgQm9rbiwgU2F1ZGEsIFR5c3bDpnIgb2cgVXRzaXJhLiBLb21tdW5lbmUgQm9rbiBvZyBUeXN2w6ZyIGhhciBzaWRlbiAyMDA4LCBoYXR0IGVuIGdyYWR2aXMsIG1lbiBub2UgdXN0YWJpbCDDuGtuaW5nIGkgYW50YWxsIGFuc2F0dGUsIG1lbnMga29tbXVuZW4gU2F1ZGEgb2cgVXRzaXJhIGhhciBoYXR0IGVuIGdyYWR2aXMgbmVkZ2FuZyBpIGFudGFsbCBhbnNhdHRlLgoKRm9yIMOlIGbDpSBlbiBiZWRyZSBvdmVyc2lrdCBvdmVyIHJlZ2lvbmVuIHPDpSB2ZWxnZXIgdmkgw6Ugc2UgcMOlIHV0dmlrbGluZ2VuIHRpbCBuw6ZyaW5nZW5lIGkga29tbXVuZW5lLCBzb20gdmlzdCBww6UgZmlndXJlbmUgdW5kZXIuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDIxOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjI6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXJlbmUgdmlzZXIgYW50YWxsIGFuc2F0dGUgZXR0ZXIgYm9zdGVkLCBmb3JkZWx0IGkgdWxpa2UgbsOmcmluZ2VyIGZvciBrb21tdW5lbmUgcMOlIEhhdWdhbGFuZGV0IGZvciBwZXJpb2RlbiAyMDA4IOKAkyAyMDIwLiBIZWxzZS0gb2cgc29zaWFsdGplbmVzdGVyIGVyIGVuIGF2IGRlIHN0w7hyc3RlIG7DpnJpbmdlbmUgZm9yIGFsbGUga29tbXVuZW5lIG9nIGRlbm5lIGVyIGdyYWR2aXMgw7hrZW5kZSBmb3IgYWxsZSBrb21tdW5lbmUgaSBwZXJpb2Rlbi4gSW5kdXN0cmkgZXIgb2dzw6UgYmxhbnQgZGUgc3TDuHJzdGUgbsOmcmluZ2VuZSBmb3IgYWxsZSBkaXNzZSBrb21tdW5lbmUsIG9nIGRlbm5lIG7DpnJpbmdlbiBlciBncmFkdmlzIGZhbGxlbmRlIGZvciBIYXVnZXN1bmQsIEthcm3DuHkgaGFyIGV0IGVuZGEgc3TDuHJyZSBmYWxsIGZvciBkZW5uZSBuw6ZyaW5nZW4gZm9yIHBlcmlvZGVuLCBkYSBzw6ZybGlnIGkgcGVyaW9kZW4gMjAwOC0yMDEwLiBGb3IgVmluZGFmam9yZCBlciBkZW5uZSBuw6ZyaW5nZW4gZ3JhZHZpcyDDuGtlbmRlIGZyZW0gdGlsIDIwMTUsIGbDuHIgZGVuIGRlcmV0dGVyIGdyYWR2aXMgZmFsbGVyIGlnamVuLgoKRm9yIEhhdWdlc3VuZCBvZyBLYXJtw7h5IHNlciB2aSBhdCBuw6ZyaW5nZW4gam9yZGJydWsgb2cgc2tvZ2JydWsgZXIgc8OmcmxpZyBsYXZlIGkgYW50YWxsIGFuc2F0dGUsIG1lbiBmb3IgVmluZGFmam9yZCBlciBkZW5uZSBuw6ZyaW5nZW4gYmV0eWRlbGlnIGjDuHllcmUgZW5uIEhhdWdlc3VuZCBvZyBLYXJtw7h5LiBGb3IgbsOmcmluZ2VuIGZpbmFuc2llcmluZyBvZyBmb3JzaWtyaW5nIGVyIGRlbm5lIGt1cnZlbiBsYXYgb2cgdGlsbsOmcm1ldCBmbGF0IGkgYWxsZSBrb21tdW5lbmUgZm9yIHBlcmlvZGVuLCBvZyBkZXQgc2FtbWUgZm9yIG7DpnJpbmdlbiBlbGVrdHJpc2l0ZXQsIHZhbm4gb2cgcmVub3Zhc2pvbi4gQnlnZy0gb2cgYW5sZWdnc3Zpcmtzb21oZXQgZXIgb2dzw6UgbGF2IGZvciBIYXVnZXN1bmQgb2cgS2FybcO4eSwgbWVuIHNvbSBqb3JkYnJ1ayBvZyBza29nYnJ1aywgZXIgZGVubmUgbsOmcmluZ2VuIGjDuHllcmUgaSBWaW5kYWZqb3JkIHNhbW1lbmxpZ25ldCBtb3Qga29tbXVuZW5lIEhhdWdlc3VuZCBvZyBLYXJtw7h5IHRhdHQgaSBiZXRyYWt0bmluZyBhdCBWaW5kYWZqb3JkIGhhciBldCBiZXR5ZGVsaWcgbGF2ZXJlIGFudGFsbCBhbnNhdHRlIHRvdGFsdCBlbm4gSGF1Z2VzdW5kIG9nIEthcm3DuHkgaGFyLgoKVmkgc2VyIG9nc8OlIHNhbW1lIHRyZW5kZW5lIGZvciBkZSBzbcOlIGtvbW11bmVuZSBww6UgSGF1Z2FsYW5kZXQuIEhlbHNlLSBvZyBzb3NpYWxlIHRqZW5lc3RlciBoYXIgZXN0dCBlbiBzdGFiaWwgdmVrc3QgaSBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyB1dHNpcmEsIG1lbnMgaW5kdXN0cmllbiBoYXIsIG1lZCB1bm50YWsgYXYgYm9rbiwgc2V0dCBlbiByZWR1a3Nqb24gaSBwZXJpb2RlbiAyMDA4IC0gMjAyMC4gVXRzaXJhIHNraWxsZXIgc2VnIG9nIHV0IG1lZCDDpSBoYXR0IGVuIHN2YWsgdmVrc3QgaSBqb3JkYnJ1aywgc2tvZ2JydWsgb2cgZmlza2UgaSBkZW5uZSBwZXJpb2Rlbi4KCiMjIFN1bm5ob3JkbGFuZAoKVmlkZXJlIHZpbCB2aSBuw6Ugc2UgcMOlIHV0dmlrbGluZ2VuIGZvciByZWdpb24gU3VubmhvcmRsYW5kLgoKYGBge3IgQm9zdGVkX1N1bm5ob3JkbGFuZF8xfQpzdW5fYm9zICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDIzOiBTdW5uaG9yZGFsYW5kIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpEZW5uZSBmaWd1cmVuIHZpc2VyIHV0dmlrbGluZ2VuIGF2IGFudGFsbCBzeXNzZWxzYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIGV0dGVyIGJvc3RlZCBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQgZnJhIDIwMDggdGlsIDIwMjAuIFZpIGthbiBzZSB1dGZyYSBncmFmZW4gYXQgcmVnaW9uZW4gaGFkZGUgZW4ga3JhZnRpZyB2ZWtzdCAyMDEwIC0gMjAxNCwgZsO4ciBkZW4gZmFsdCBrcmFmdGlnIGkgMjAxNCAtIDIwMTYsIGbDuHIgcmVnaW9uZW4gaWdqZW4gaGFyIHNldHQgZW4ga3JhZnRpZyB2ZWtzdCAyMDE2IC0gMjAxOS4gVXQgZnJhIGdyYWZlbiBrYW4gZGV0IHNlIHV0IHRpbCBhdCByZWdpb25lbiBpZ2plbiBzdMOlciBvdmVuZm9yIGVuIG55IHJlZHVrc2pvbiBmcmEgMjAxOSBhdi4KClZpIMO4bnNrZXIgw6Ugc2UgdmlkZXJlIHDDpSB1dHZpa2xpbmdlbiBww6Uga29tbXVuYWx0IG5pdsOlLCBzb20gdmlzdCBpIGZpZ3VyIDI0LgoKYGBge3IgQm9zdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMjQ6IFN1bm5ob3JkbGFuZCIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciB1dCBmcmEgZ3JhZmVuIGhlciBhdCBkZXQgZXIgaSBob3ZlZHNhayBTdG9yZCwgS3Zpbm5oZXJhZCBvZyBCw7htbG8gc29tIGhhciBzZXR0IGRlbiBzdMO4cnN0ZSBzdmluZ25pbmdlbmUgaSBhbnRhbGwgc3lzc2Vsc2F0dGUgZXR0ZXIgYm9zdGVkLiBNZW4gdmkga2FuIG9nc8OlIGtsYXJ0IHNlIGF0IGRpc3NlIDMga29tbXVuZW5lIGFsbGUgaGFkZGUgZXQgZmFsbCBpIDIwMTQsIHNvbSBzYW1zdmFyZXIgbWVkIGZpZ3VyIDIzLiBHcmFmZW4gZXIgaW1pZGxlcnRpZGlnIGlnamVuIGlra2UgdHlkZWxpZyBub2sgcMOlIGdydW5uIGF2IGRlIHN0b3JlIGtvbW11bmVuZSwgb2cgdmkgZnJlbXN0aWxsZXIgZGVybWVkIGdyYWZlbmUgcMOlIGtvbW11bmFsdCBuaXbDpSBoZXIgb2cgZm9yIMOlIHR5ZGVsaWdqZXJlIHV0dmlrbGluZ2VuIHDDpSBrb21tdW5hbHQgbml2w6UuCgpgYGB7ciBzdW5fYm9zX2xvbmd9CnN1bl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjU6IFN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIkZpdGphciIsICJTdmVpbyIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjY6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0aGFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgMjUgb2cgMjYgdmlzZXIgaGVyIHV0dmlrbGluZ2VuIGkgc3lzc2Vsc2F0dGUgZXR0ZXIgYm9zdGVkIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIGtvbW11bmFsdCBuaXbDpSwgbWVuIG7DpSBlciBodmVyIGtvbW11bmUgc2tpbHQgZnJhIGh2ZXJhbmRyZSBvZyB2aSBmw6VyIGV0IGhlbHQgYW5uZXQgYmlsZGUuIFZpIHNlciBuw6UgcmVkdWtzam9uZW4gaSBkZSB0cmUgc3RvcmUga29tbXVuZW5lIFN0b3JkLCBLdmlubmhlcmFkIG9nIELDuG1sbyBteWUgbWVyIHR5ZGVsaWcgb2cgaHZvciBkcmFzdGlzayBkZW5uZSByZWR1a3Nqb25lbiBoYXIgdsOmcnQuIFZpIHNlciBvZ3PDpSBuw6UgYXQgYsOlZGUgRXRuZSBvZyBUeXNuZXMgb2dzw6UgaGFyIGhhdHQgZW4gcGVyaW9kZSBtZWQga3JhZnRpZyByZWR1a3Nqb24sIG1lZCBFdG5lIDIwMTQgLSAyMDIwIG9nIFR5c25lcyAyMDA4IC0gMjAxMi4gVHlzbmVzIGhhciBzZXR0IGVuIHN2YWsgdmVrc3QgZnJhIDIwMTIsIG1lbnMgZml0amFyIHPDpWcgc3RlcmsgdmVrc3QgMjAwOSAtIDIwMTQgb2cgaGFyIGV0dGVyIDIwMTQgc2V0dCBlbiBzdmFrIHJlZHVrc2pvbi4KClZpIGVyIGZvcnRzYXR0IGlra2UgZm9ybsO4eWQsIGZvciB2aSDDuG5za2VyIMOlIHNlIHDDpSB1dHZpa2xpbmdlbiB0aWwgbm9lbiB1dHZhbGd0ZSBuw6ZyaW5nZXIgaSBrb21tdW5lbmUsIG9nIHNlciBkZXJtZWQgdmlkZXJlIHDDpSBmaWd1ciAyNyBvZyAyOC4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyNzogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJTdmVpbyIsICJGaXRqYXIiLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjg6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0amFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRGlzc2UgZmlndXJlbmUsIDI3IG9nIDI4LCB2aXNlciB1dHZpa2xpbmdlbiBhdiBzeXNzZWxzYXR0ZSBldHRlciBib3N0ZWQsIHDDpSBrb21tdW5hbHQgbml2w6UgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gMjAwOCAtIDIwMjAuCgpWaSBzZXIgbsOlIGVuIHRyZW5kIGZvciBTdG9yZCwgQsO4bWxvIG9nIEt2aW5uaGVyYWQuIEFsbGUgZGlzc2UgdHJlIGtvbW11bmVuZSBoYWRkZSBldCBrcmFmdGlnIGZhbGwgaSAyMDE0LiBLdmlubmhlcmFkIGhhZGRlIGFsbGVyZWRlIGVuIGpldm4gcmVkdWtzam9uIGkgaW5kdXN0cmkgZnJlbSB0aWwgMjAxNCwgbWVuIGhhZGRlIGxpa2V2ZWxsIGV0IGtyYWZ0aWcgZmFsbCBoZXIsIHNhbW1lbiBtZWQgU3RvcmQgb2cgQsO4bWxvLiBSZWR1a3Nqb25lbiBpIGluZHVzdHJpIGZvciBLdmlubmhlcmFkIGVyIG1lc3Qgc2FubnN5bmVsaWcgc3RlbmdpbmcgYXYgIkItaGFsbGVuIiBww6UgU8O4ci1Ob3JnZSBBbHVtaW5pdW0gQVMgaSAyMDA4IGVuIGF2IGZha3RvcmVuZS4KClZpIHPDpWcgYWtrdXJhdHQgc2FtbWUgZmFsbGV0IG7DpXIgdmkgc8OlZyBww6Ugc3lzc2Vsc2V0dGluZyBldHRlciBhcmJlaWRzc3RlZCB0aWRsZWdlcmUgaSByYXBwb3J0ZW4uIERldHRlIGtvbW1lciBtZXN0IHNhbm5zeW5lbGlnIGF2IG9samUta25la2tldCBpIDIwMTQuIEFrZXIgU29sdXRpb25zLCBzb20gZGV0IGhldGVyIGkgZGFnLCBlciBibGFudCBTdW5uaG9yZGxhbmRzIHN0w7hyc3RlIGFyYmVpZHNwbGFzc2VyLCBvZyBkZXQgZXIgZmxlcmUgc29tIHBlbmRsZXIgZnJhIGLDpWRlIEt2aW5uaGVyYWQgb2cgQsO4bWxvIHNvbSBqb2JiZXIgcMOlIEFrZXIgU29sdXRpb25zLiBEZXQgZXIgZGVybWVkIG5hdHVybGlnIGF0IGTDpXJsaWdlIHRpZGVyIGkgb2xqZS1pbmR1c3RyaWVuIHZpbCBww6V2aXJrZSBBa2VyIHNvbSBpZ2plbiB2aWwgcMOldmlya2Uga29tbXVuZW5lIHNvbSBoYXIgc3lzc2Vsc2V0dGUgaSBkZW5uZSBuw6ZyaW5nYS4gVmkgc2VyIGVuZGEgZXQgZmFsbCBpIEt2aW5uaGVyYWQgaW5uZW4gaW5kdXN0cmkgaSAyMDE2LCBvZyBkZXR0ZSBrb21tZXIgbWVzdCBzYW5uc3luZWxpZyBhdiBhdCBFaWRlIE1hcmluZSBTZXJ2aWNlIHDDpSBIYWxzbsO4eSBibGVpIHNsw6V0dCBrb25rdXJzIGRldHRlIMOlcmV0LgoKQWxsZSBrb21tdW5lbmUgaSByZWdpb24gU3VubmhvcmRsYW5kIGhhciBvZ3PDpSBzZXR0IGVuIHZla3N0IGlubmVuIGhlbHNlLSBvZyBzb3NpYWxldGplbmVzdGVyIGkgcGVyaW9kZW4gMjAwOCAtIDIwMjAuIEt2aW5uaGVyYWQsIELDuG1sbywgU3RvcmQsIEZpdGphciBvZyBUeXNuZXMgaGFyIHNldHQgZW4gdmVrc3QgaW5uZW4gam9yZGJydWssIHNrb2dicnVrIG9nIGZpc2tlLiBNZXN0IHNhbm5zeW5lbGlnIGVyIGZpc2tlIGVuIHN0b3IgZGVsIGF2IHZla3N0ZW4gZGEgQWxzYWtlciBGam9yZGJydWsgaGFyIGVrc3BhbmRlcnQgaSBkaXNzZSBrb21tdW5lbmUgaSBkZW5uZSBwZXJpb2Rlbi4gQnlnZ2UtIG9nIEFubmxlZ2dzdmlya3NvbWhldCBoYXIgb2dzw6UgaGF0dCBlbiBsaXRlbiB2ZWtzdCBpIGZsZXJlIGtvbW11bmVyLCBtZW5zIGZpbmFucyByZWxhdGVydCBha3Rpdml0ZXQgaGFyIHNldHQgZW4gamV2biByZWR1a3Nqb24gaSBoZWxlIHJlZ2lvbmVuLgoKIyMgSGFyZGFuZ2VyCgpTaXN0ZSByZWdpb25lbiB2aSDDuG5za2VyIMOlIHNlIHDDpSBlciBIYXJkYW5nZXIsIG1lciBzcGVzaWZpa3QgT2RkYSBmcmVtIHRpbCAyMDE5IG9nIFVsbGVuc3ZhbmcgZnJlbSB0aWwgMjAyMC4gVmkgaGFyIGlra2UgdGF0dCBtZWQgSm9uZGFsIGkgSGFyZGFuZ2VyIGZyZW0gdGlsIDIwMTkuIElnamVuIHPDpSBzZXIgdmkgbsOlIHDDpSBzeXNzZWxzZXR0aW5nIGV0dGVyIGJvc3RlZC4KClZpIHNlciBmw7hyc3QgcMOlIGhlbGUgcmVnaW9uZW4gc2FtbGV0LCBqZi4gZmlndXIgMjkuCgpgYGB7ciBCb3N0ZWRfSGFyZGFuZ2VyXzF9Cmhhcl9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjk6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkRlbm5lIGZpZ3VyZW4gdmlzZXIgdXR2aWtsaW5nZW4gaSBzeXNzZWxzZXR0aW5nIGV0dGVyIGJvc3RlZCwgaSBoZWxlIHJlZ2lvbmVuLCBvZyBoZXIgZXIgZGV0IG5vZSBzb20gYsO4ciBiZW1lcmtlcy4gRsO4cnN0IG9nIGZyZW1zdCBzaWRlbiBKb25kYWwgaWtrZSB2YXIgZW4gZGVsIGF2IGRhdGFlbmUgZnJlbSB0aWwgMjAxOSwgbWVuIGJsaXIgdGF0dCBtZWQgaSBVbGxlbnN2YW5nIGkgMjAyMCBzw6UgdmlsIHZpIHNlIGVuIHVuYXR1cmxpZyB2ZWtzdCBpIGRlbm5lIGZpZ3VyZW4gaSAyMDIwLiBEZXR0ZSBlciBlbiBzdmFraGV0IGkgbW9kZWxsZW4gb2cgZGF0YWVuZSB2w6VyZXMuIERldCBhbmRyZSBlciBhdCB2aSBrYW4gc2UgZW4ga2xhciBuZWdhdGl2IHV0dmlrbGluZyBpIEhhcmRhbmdlciBmcmVtIHRpbCAyMDE5LgoKRm9yIMOlIGlsbHVzdHJlcmUgdXR2aWtsaW5nZW4gYmVkcmUsIHPDpSBza2lsbGVyIHZpIG1lbGxvbSBPZGRhIG9nIFVsbGVuc3ZhbmcgdmVkIG5lc3RlIGZpZ3VyLgoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMzA6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciBuw6UgcMOlIGRlbm5lIGZpZ3VyZW4gYXQgYsOlZGUgT2RkYSBvZyBVbGxlbnN2YW5nIGhhciBoYXR0IGVuIG5lZ2F0aXYgdXR2aWtsaW5nIGZyZW0gdGlsIG9nIG1lZCAyMDE5LiBWaSBzZXIgb2dzw6UgcHJvYmxlbXN0aWxsaW5nZW4gbWVkIMOlIGlra2UgdGEgbWVkIEpvbmRhbCB1bmRlciBIYXJkYW5nZXIga29tbWVyIHR5ZGVsaWdlcmUgZnJlbSBuw6UgbWVkIGVuIGVrc3RyZW0gdmVrc3QgZXR0ZXIgc2FtbWVuc2zDpWluZ2VuIG1lbGxvbSBPZGRhLCBKb25kYWwgb2cgVWxsZW5zdmFuZyBpIDIwMjAuIEbDuHIgdmkgdmVsZ2VyIMOlIHNlIHDDpSB1dHZhbGd0ZSBuw6ZyaW5nZXIgaSBodmVyIGtvbW11bmUsIHZlbGdlciB2aSBmw7hyc3Qgw6UgZGVsZSBrb21tdW5lbmUgb3BwIGh2ZXIgZm9yIHNlZywgc2xpayBhdCB2aSBrYW4gc2UgdXR2aWtsaW5nZW4gbWVyIGRyYXN0aXNrLgoKYGBge3IgaGFyX2Jvc19sb25nfQpoYXJfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMzE6IEhhcmRhbmdlcjogT2RkYSBvZyBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciBoZXIgdHlkZWxpZyB1dHZpa2xpbmdlbiB0aWwgc3Blc3NpZWx0IE9kZGEsIHNvbSBiZXJyZSBzdHVwZXIgbmVkLCB1dGVuIHRlZ24gdGlsIMOlIHNudSBtZWQgZGV0IGbDuHJzdGUuIEZvciDDpSBzZSB1dHZpa2xpbmdlbiB0eWRsaWdlcmUgc8OlIGRlbGVyIHZpIGlnamVuIG9wcCBpIG5vZW4gdXR2YWxndGUgbsOmcmluZ2VyIGkgaHZlciBrb21tdW5lLCBqZi4gZmlndXIgMzIuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzMjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClZpIHNlciBww6UgZGVubmUgZmlndXJlbiB1dHZpa2xpbmdlbiBhdiA2IHVsaWtlIG7DpnJpbmdhciwgbWVkIGhlbnN5biBww6Ugc3lzc3NlbHNldHRpbmcgZXR0ZXIgYm9zdGVkLCBpIEhhcmRhbmdlciBpIGRlbm5lIHBlcmlvZGVuLiBWaSBzZXIgc2FtbWUgdHJlbmRlciBoZXIgaSBIYXJkYW5nZXIgc29tIHZpIGdqb3JlIGZvciBiw6VkZSBTdW5uaG9yZGxhbmQgb2cgSGF1Z2FsYW5kZXQ6IHJlZHVrc2pvbiBpIGluZHVzdHJpIG9nIHByaW3DpnJuw6ZyaW5nYW5lLCBtZW5zIHZpIHNlciBlbiB2ZWtzdCBpIGhlbHNldGplbmVzdGVyLiBEZXQgc29tIGVyIGxpdHQgaW50ZXJlc3NhbnQgw6UgYmVtZXJrZSBlciBhdCBPZGRhIHPDpWcgZW4gdmVrc3QgaSBpbmR1c3RyaSBmcmEgMjAxNiB0aWwgMjAxOSwgbWVuIGdydW5uYSBzYW1tZW5zbMOlaW5nZW4gZXIgZGV0IHZhbnNrZWxpZyDDpSBzaSBub2Ugb20gdXR2aWtsaW5nZW4gZm9yIE9kZGEgc3Blc2lmaWt0IGkgMjAyMC4gSWdqZW4gc8OlIHNlciB2aSBvZ3PDpSBzYW1tZSBla3N0cmVtZSB2ZWtzdCBpIFVsbGVuc3ZhbmcgaSAyMDIwIHNvbSBrb21tZXIgYXYgc2FtbWVuc2zDpWluZ2VuLgoKT2RkYSBlciBramVudCBsb2thbHQgZm9yIHNpbiBhbGRyZW5kZSBiZWZvbGtuaW5nLCBzb20gbWVzdCBzYW5uc3luZWxpZyBlciBlbiB2aWt0aWcgZmFrdG9yIGZvciBodm9yZm9yIE9kZGEgaGFyIHNldHQgc8OlIGtyYWZ0aWcgcmVkdWtzam9uIGkgc3lzc2Vsc2V0dGluZyBldHRlciBib3N0ZWQsIHNhbXRpZGlnIHNvbSBrb21tdW5lbiBoYXIgc2V0dCBlbiB2ZWtzdCBpIGhlbHNldGplbmVzdGVyLgoKIyAzLjEgTG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgKERldHRlIGVyID5FR0VOVExJRzwgT3BwZ8OldmUgMiBzb20gYmxpciBnam9ydCBoZXIuIERlbm5lIG9nIEdpbmkvUkRJIGZvciBvcHBnw6V2ZSAyIGLDuHIgYmxpIGJ5dHRhc3Qgb20pCgpgYGB7cn0KbGlicmFyeShyZWFkeGwpCm5hc2pvbmFsdF9hcmJlaWRzc3RlZCA8LSByZWFkX2V4Y2VsKCJEYXRhL25hc2pvbmFsdF9hcmJlaWRzc3RlZC54bHN4IikKYGBgCgojIyBMb2thbGlzZXJpbmdza3ZvdGllbnRlciBmb3IgcmVnaW9uZW5lIHNhbWxldAoKTsOlIGhhciB2aSBpbGx1c3RlcnQgb2cgc2V0dCBww6UgZ3JhZmVuZSBmb3IgdXR2aWtsaW5nZW4gaSBkZSB0cmUgcmVnaW9uZW5lLCBtZWQgaGVuc3luIHDDpSBzeXNzZWxzZXR0aW5nIGV0dGVyIGFyYmVpZHNzdGVkLiBWaWRlcmUgaSByYXBwb3J0ZW4gc2thbCB2aSBuw6Ugc2UgcMOlIEdpbmkta29lZmZpc2llbnRlbmUgb2cgZGVuIHJlZ2lvbmVsbGUgZGl2ZXJzaWZpc2VyaW5ncyBpbmRla3NlbiAoUkRJKSBmb3Igw6UgdnVyZGVyZSBodm9yIHNwcmVkdCBlbGxlciBrb25zZW50cmVydCwgc2FtdCBzcGVzaWFsaXNlcnQgdXR2bGFndCBuw6ZyaW5nZXIgZXIgaSB1dHZhbGd0ZSBrb21tdW5lciBpIHJlZ2lvbmVuZS4KCiMjIyBIYXVnYWxhbmRldCAyMDA4LTIwMjAKCkbDuHJzdGUgdmkgc2VyIHDDpSBlciBIYXVnYWxhbmRldC4KCmBgYHtyIGhsZF9hcmJfRWlyX0VyfQpobGRfYXJiX0xRIDwtIGhsZF9hcmIgJT4lIAogIG11dGF0ZShFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cgPSBgQnlnZ2UtIG9nIEFubmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0ZpbmFucyA9IGBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZ2AvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9Kb3JkYnJ1ayA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9CeWdnX29nX0FubGVnZyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrLAogICAgICAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmksCiAgICAgICAgIExRX0VsX1Zhbm5fUmVubyA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubywKICAgICAgICAgTFFfQnlnZ19vZ19BbmxlZ2cgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnLAogICAgICAgICBMUV9GaW5hbnMgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMsCiAgICAgICAgIExRX1VuZGVydmlzbmluZyA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZywKICAgICAgICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlCikgJT4lIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9FbF9WYW5uX1Jlbm8sIExRX0J5Z2dfb2dfQW5sZWdnLCBMUV9GaW5hbnMsIExRX1VuZGVydmlzbmluZywgTFFfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXVnYWxhbmRldCI9OSkpCmBgYAoKVmkKCmBgYHtyfQpobGRfYXJiX0dJTkkgPC0gaGxkX2FyYiAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChobGRfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIGhsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKGhsZF9hcmIkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoaGxkX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIGhsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CmhsZF9hcmJfR0lOSSA8LSBobGRfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhobGRfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoaGxkX2FyYiRJbmR1c3RyaSAvIGhsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKGhsZF9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2hsZF9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKGhsZF9hcmJfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiSGF1Z2FsYW5kZXQiPTgpKQpgYGAKCiMjIyMgS29tbXVuZW5pdsOlIHDDpSBIYXVnYWxhbmRldCAoSGF1Z2VzdW5kLCBLYXJtw7h5LCBUeXN2w6ZyIG9nIEJva24pCgojIyMjIyBIYXVnZXN1bmQKCmBgYHtyfQpIYXVnX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTEwNiIpCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhIYXVnX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChIYXVnX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gSGF1Z19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoSGF1Z19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoSGF1Z19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkgLyBIYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhIYXVnX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9IYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBIYXVnX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgSGF1Z19hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdlc3VuZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIEJva24KCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NSIpCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhCb2tuX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChCb2tuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEJva25fYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoQm9rbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEJva25fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBCb2tuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhCb2tuX2FyYl9HSU5JJEluZHVzdHJpIC8gQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoQm9rbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgQm9rbl9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCb2tuX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbjogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIFR5c3bDpnIKCmBgYHtyfQpUeXN2X2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NiIpCmBgYAoKYGBge3J9ClR5c3ZfYXJiX0dJTkkgPC0gVHlzdl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhUeXN2X2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClR5c3ZfYXJiX0dJTkkgPC0gVHlzdl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChUeXN2X2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIFR5c3ZfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFR5c3ZfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoVHlzdl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFR5c3ZfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClR5c3ZfYXJiX0dJTkkgPC0gVHlzdl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFR5c3ZfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBUeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhUeXN2X2FyYl9HSU5JJEluZHVzdHJpIC8gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoVHlzdl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVHlzdl9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmcjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBUeXN2X2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmcjoiPTExKSkKYGBgCgojIyMjIyBLYXJtw7h5CgpgYGB7cn0KS2FybV9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjExNDkiKQpgYGAKCmBgYHtyfQpLYXJtX2FyYl9HSU5JIDwtIEthcm1fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS2FybV9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpLYXJtX2FyYl9HSU5JIDwtIEthcm1fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS2FybV9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBLYXJtX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChLYXJtX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEthcm1fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBLYXJtX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLYXJtX2FyYl9HSU5JIDwtIEthcm1fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhLYXJtX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoS2FybV9hcmJfR0lOSSRJbmR1c3RyaSAvIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEthcm1fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0thcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEthcm1fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHk6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS2FybV9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkthcm3DuHk6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMgU3VubmhvcmRsYW5kIDIwMDgtMjAyMAoKLSAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0luZHVzdHJpID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSW5kdXN0cmktc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfRWxfVmFubl9SZW5vID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gRWxla2V0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uLXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0LXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0ZpbmFucyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nLXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIFVuZGVydmlzbmluZy1zZWt0b3JlbiBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQKLSAgIEVpcl9Fcl9IZWxzZSA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXItc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCgpgYGB7ciBzdW5faW5kdXN0cml9CnN1bl9hcmJfTFEgPC0gc3VuX2FyYiAlPiUgCiAgIyBTbGlrIGZpbm5lciB2aSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIEluZHVzdHJpIGkgU3VubmhvcmRsYW5kIGZvciDDpXIgMjAwOC0yMDIwCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0pvcmRicnVrID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAoKICAgICAgICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAoKICAgICAgICAgRWluX0VuX0VsX1Zhbm5fUmVubyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0ZpbmFucyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX1VuZGVydmlzbmluZyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRVbmRlcnZpc25pbmcvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIAogICAgICAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Kb3JkYnJ1ay9FaW5fRW5fSm9yZGJydWssCiAgICAgICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpL0Vpbl9Fbl9JbmR1c3RyaSwKICAgICAgICAgTFFfRWxfVmFubl9SZW5vID0gRWlyX0VyX0VsX1Zhbm5fUmVuby9FaW5fRW5fRWxfVmFubl9SZW5vLAogICAgICAgICBMUV9CeWdnX29nX0FubGVnZyA9IEVpcl9Fcl9CeWdnX29nX0FubGVnZy9FaW5fRW5fQnlnZ19vZ19BbmxlZ2csCiAgICAgICAgIExRX0ZpbmFucyA9IEVpcl9Fcl9GaW5hbnMvRWluX0VuX0ZpbmFucywKICAgICAgICAgTFFfVW5kZXJ2aXNuaW5nID0gRWlyX0VyX1VuZGVydmlzbmluZy9FaW5fRW5fVW5kZXJ2aXNuaW5nLAogICAgICAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZS9FaW5fRW5fSGVsc2UKKSAlPiUgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0VsX1Zhbm5fUmVubywgTFFfQnlnZ19vZ19BbmxlZ2csIExRX0ZpbmFucywgTFFfVW5kZXJ2aXNuaW5nLCBMUV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKHN1bl9hcmJfTFEsCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJKb3JkYnJ1ayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYW5uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ5Z2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiRmluYW5zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuZGVydi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJMb2thbGt2b3RpZW50ZW4sIHJlZ2lvbjogU3VubmhvcmRsYW5kIj05KSkKYGBgCgpgYGB7cn0Kc3VuX2FyYl9HSU5JIDwtIHN1bl9hcmIgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoc3VuX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChzdW5fYXJiJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIHN1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKHN1bl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpzdW5fYXJiX0dJTkkgPC0gc3VuX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoc3VuX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIHN1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhzdW5fYXJiJEluZHVzdHJpIC8gc3VuX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKHN1bl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL3N1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKHN1bl9hcmJfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlJlZ2lvbjogU3VubmhvcmRsYW5kIj04KSkKYGBgCgojIyMjIEtvbW11bmVuaXbDpSBpIFN1bm5ob3JkbGFuZCAoU3RvcmQsIEt2aW5uaGVyYWQsIELDuG1sbyBvZyBTdmVpbykKCiMjIyMjIFN0b3JkCgpgYGB7cn0KU3RvcmRfYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE0IikKYGBgCgpgYGB7cn0KU3RvcmRfYXJiX0dJTkkgPC0gU3RvcmRfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoU3RvcmRfYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KU3RvcmRfYXJiX0dJTkkgPC0gU3RvcmRfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoU3RvcmRfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFN0b3JkX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFN0b3JkX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChTdG9yZF9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFN0b3JkX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpTdG9yZF9hcmJfR0lOSSA8LSBTdG9yZF9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFN0b3JkX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFN0b3JkX2FyYl9HSU5JJEluZHVzdHJpIC8gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFN0b3JkX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9TdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgU3RvcmRfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN0b3JkOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFN0b3JkX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3RvcmQ6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBLdmlubmhlcmFkCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE3IikKYGBgCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gS3Zpbm5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS3Zpbm5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gS3Zpbm5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS3Zpbm5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChLdmlubl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBLdmlubl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9Ldmlubl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkt2aW5uaGVyYWQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJLdmlubmhlcmFkOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgQsO4bWxvCgpgYGB7cn0KQsO4bWxvX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxMyIpCmBgYAoKYGBge3J9CkLDuG1sb19hcmJfR0lOSSA8LSBCw7htbG9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQsO4bWxvX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkLDuG1sb19hcmJfR0lOSSA8LSBCw7htbG9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQsO4bWxvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoQsO4bWxvX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoQsO4bWxvX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCw7htbG9fYXJiX0dJTkkgPC0gQsO4bWxvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoQsO4bWxvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhCw7htbG9fYXJiX0dJTkkkSW5kdXN0cmkgLyBCw7htbG9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKELDuG1sb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBCw7htbG9fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkLDuG1sbzogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCw7htbG9fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJCw7htbG86IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBTdmVpbwoKYGBge3J9ClN2ZWlvX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxMiIpCmBgYAoKYGBge3J9ClN2ZWlvX2FyYl9HSU5JIDwtIFN2ZWlvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKFN2ZWlvX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClN2ZWlvX2FyYl9HSU5JIDwtIFN2ZWlvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKFN2ZWlvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChTdmVpb19hcmJfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBTdmVpb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoU3ZlaW9fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBTdmVpb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KU3ZlaW9fYXJiX0dJTkkgPC0gU3ZlaW9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhTdmVpb19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhTdmVpb19hcmJfR0lOSSRJbmR1c3RyaSAvIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhTdmVpb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIFN2ZWlvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJTdmVpbzogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBTdmVpb19hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN2ZWlvOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIEhhcmRhbmdlciAyMDA4LTIwMjAKCi0gICBFaXJfRXJfSm9yZGJydWsgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9JbmR1c3RyaSA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEluZHVzdHJpLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEVsZWtldHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbi1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldC1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9GaW5hbnMgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZy1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBVbmRlcnZpc25pbmctc2VrdG9yZW4gaSByZWdpb24gSGFyZGFuZ2VyCi0gICBFaXJfRXJfSGVsc2UgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgoKYGBge3IgaGFyX2luZHVzdHJpfQpoYXJfYXJiX0xRIDwtIGhhcl9hcmIgJT4lIAogICMgU2xpayBmaW5uZXIgdmkgc2FtbGV0IHN5c3NlbHNldHRpbmcgaSBJbmR1c3RyaSBpIEhhcmRhbmdlciBmb3Igw6VyIDIwMDgtMjAyMAogIG11dGF0ZShFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cgPSBgQnlnZ2UtIG9nIEFubmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0ZpbmFucyA9IGBGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZ2AvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9Kb3JkYnJ1ayA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKCiAgICAgICAgIEVpbl9Fbl9FbF9WYW5uX1Jlbm8gPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9CeWdnX29nX0FubGVnZyA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0YC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICAKICAgICAgICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgCiAgICAgICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfSm9yZGJydWsvRWluX0VuX0pvcmRicnVrLAogICAgICAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmksCiAgICAgICAgIExRX0VsX1Zhbm5fUmVubyA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubywKICAgICAgICAgTFFfQnlnZ19vZ19BbmxlZ2cgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnLAogICAgICAgICBMUV9GaW5hbnMgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMsCiAgICAgICAgIExRX1VuZGVydmlzbmluZyA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZywKICAgICAgICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlCikgJT4lIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9FbF9WYW5uX1Jlbm8sIExRX0J5Z2dfb2dfQW5sZWdnLCBMUV9GaW5hbnMsIExRX1VuZGVydmlzbmluZywgTFFfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShoYXJfYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXJkYW5nZXIiPTkpKQpgYGAKCmBgYHtyfQpoYXJfYXJiX0dJTkkgPC0gaGFyX2FyYiAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChoYXJfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKGhhcl9hcmIkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoaGFyX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9Cmhhcl9hcmJfR0lOSSA8LSBoYXJfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhoYXJfYXJiJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKGhhcl9hcmIkSW5kdXN0cmkgLyBoYXJfYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGFyX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgICU+JQogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGFyX2FyYl9HSU5JLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiUmVnaW9uOiBIYXJkYW5nZXIiPTgpKQpgYGAKCiMjIyMgS29tbXVuZW5pdsOlIGkgSGFyZGFuZ2VyIChPZGRhIG9nIFVsbGVuc3ZhbmcpCgojIyMjIyBPZGRhCgpgYGB7cn0KbmFzam9fYXJiX3JlZCA8LSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQgJT4lIAogIGZpbHRlcihhYXIgJWluJSBjKDIwMDg6MjAxOSkpCmBgYAoKYGBge3J9Ck9kZGFfYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMjI4IikKYGBgCgpgYGB7cn0KT2RkYV9hcmJfR0lOSSA8LSBPZGRhX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9fYXJiX3JlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvX2FyYl9yZWQkSW5kdXN0cmkvbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgLAogICAgCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKE9kZGFfYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KT2RkYV9hcmJfR0lOSSA8LSBPZGRhX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKE9kZGFfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9fYXJiX3JlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChPZGRhX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvX2FyYl9yZWQkSW5kdXN0cmkgLSBPZGRhX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoT2RkYV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9fYXJiX3JlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBPZGRhX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KT2RkYV9hcmJfR0lOSSA8LSBPZGRhX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoT2RkYV9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9fYXJiX3JlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoT2RkYV9hcmJfR0lOSSRJbmR1c3RyaSAvIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9fYXJiX3JlZCRJbmR1c3RyaSAvIG5hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoT2RkYV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBPZGRhX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJPZGRhKC0yMDE5KTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBPZGRhX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiT2RkYSgtMjAxOSk6IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBVbGxlbnN2YW5nCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICI0NjE4IikKYGBgCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gVWxsZW5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmAsCiAgICAKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCwKICAgIAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoVWxsZW5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gVWxsZW5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoVWxsZW5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChVbGxlbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBVbGxlbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9VbGxlbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlVsbGVuc3Zhbmc6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJVbGxlbnN2YW5nOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKPz9EZXR0ZSBmZXJkaWc/PwoKLS0gT3BwZGF0ZXJ0IExRLXZlcmRpYXIKCiMjIE5hc2pvbmFsdD8/IChEZXR0ZSBrYW4ga2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhbnNramUgYmxpIHRhdHQgdmVray4gRGV0IHNlciB2aSBldHRlciBrdmFydCkKCmBgYHtyfQojc3lzc2VsX2FyYiA8LSBzeXNzZWxfYXJiICU+JSAKIyAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKYGBge3J9CiNuYXNqb25hbHRfYXJiZWlkc3N0ZWQgPC0gbmFzam9uYWx0X2FyYmVpZHNzdGVkICU+JSAKIyAgbXV0YXRlKEVpbl9Fbl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpbl9Fbl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCgoKI0xRX2FyYl9Kb3JkYnJ1ayA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9Kb3JkYnJ1aykgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fSm9yZGJydWspLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9Kb3JkYnJ1ay9FaW5fRW5fSm9yZGJydWspCgoKI0xRX2FyYl9JbmR1c3RyaSA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9JbmR1c3RyaSkgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fSW5kdXN0cmkpLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9JbmR1c3RyaS9FaW5fRW5fSW5kdXN0cmkpCgoKI0xRX2FyYl9FbF9WYW5uX1Jlbm8gPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfRWxfVmFubl9SZW5vKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9FbF9WYW5uX1Jlbm8pLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9FbF9WYW5uX1Jlbm8vRWluX0VuX0VsX1Zhbm5fUmVubykKCgojTFFfYXJiX0J5Z2dfQW5sZWdnIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9CeWdnX29nX0FubGVnZyksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0J5Z2dfb2dfQW5sZWdnL0Vpbl9Fbl9CeWdnX29nX0FubGVnZykKCgojTFFfYXJiX0ZpbmFucyA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9GaW5hbnMpICU+JSAKIyAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiMgIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQsIGFhciwgRWluX0VuX0ZpbmFucyksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0ZpbmFucy9FaW5fRW5fRmluYW5zKQoKCiNMUV9hcmJfVW5kZXJ2aXNuaW5nIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX1VuZGVydmlzbmluZykgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fVW5kZXJ2aXNuaW5nKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAojICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfVW5kZXJ2aXNuaW5nL0Vpbl9Fbl9VbmRlcnZpc25pbmcpCgoKI0xRX2FyYl9IZWxzZSA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9IZWxzZSkgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fSGVsc2UpLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9IZWxzZS9FaW5fRW5fSGVsc2UpCmBgYAoKYGBge3J9CiNzeXNzZWxfYXJiIDwtIHN5c3NlbF9hcmIgJT4lIAojICBtdXRhdGUoTFFfYXJiX0pvcmRicnVrID0gTFFfYXJiX0pvcmRicnVrJGFuZGVsLAojICAgICAgICAgTFFfYXJiX0luZHVzdHJpID0gTFFfYXJiX0luZHVzdHJpJGFuZGVsLAojICAgICAgICAgTFFfYXJiX0VsX1Zhbm5fUmVubyA9IExRX2FyYl9FbF9WYW5uX1Jlbm8kYW5kZWwsCiMgICAgICAgICBMUV9hcmJfQnlnZ19BbmxlZ2cgPSBMUV9hcmJfQnlnZ19BbmxlZ2ckYW5kZWwsCiMgICAgICAgICBMUV9hcmJfRmluYW5zID0gTFFfYXJiX0ZpbmFucyRhbmRlbCwKIyAgICAgICAgIExRX2FyYl9VbmRlcnZpc25pbmcgPSBMUV9hcmJfVW5kZXJ2aXNuaW5nJGFuZGVsLAojICAgICAgICAgTFFfYXJiX0hlbHNlID0gTFFfYXJiX0hlbHNlJGFuZGVsKQpgYGAKCmBgYHtyfQojTFFfYXJiIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgTFFfYXJiX0pvcmRicnVrLCBMUV9hcmJfSW5kdXN0cmksIExRX2FyYl9FbF9WYW5uX1Jlbm8sIExRX2FyYl9CeWdnX0FubGVnZywgTFFfYXJiX0ZpbmFucywgTFFfYXJiX1VuZGVydmlzbmluZywgTFFfYXJiX0hlbHNlKQpgYGAKCmBgYHtyfQojTFFfYXJiW2lzLm5hKExRX2FyYildID0gMApgYGAKCi0gICAKCiMgUGVuZGxpbmcKCkRlIHVsaWtlIGtvbW11bmVuZSBvZyByZWdpb25lbmUgaGFyIHVsaWtlIGJlaG92LCBmb3IgYXQgcmVnaW9uZW5lIHNrYWwgdXR2aWtsZSBzZWcgZXIgcGVuZGxpbmcgZXQgdmlrdGlnIGJlZ3JlcCBmb3Igw6UgdGlsdHJla2tlIHNlZyBhcmJlaWRza3JhZnQuClZlbGRpZyBtYW5nZSBrb21tdW5lciBoYXIgZm9yIGxpdGUgYXJiZWlkc3BsYXNzZXIgaSBmb3Job2xkIHRpbCBhbnRhbGwgYXJiZWlkZW5kZSBpbm5ieWdnZXJlLCBzb20gdmlsIHNpIGF0IGRlIGZsZXN0ZSBlciBhdmhlbmdpZ2UgYXYgcGVuZGxlcmUuClBlbmRsaW5nIGthbiB2w6ZyZSB0aWwgYW5kcmUga29tbXVuZXIgaSBzYW1tZSByZWdpb24gZWxsZXIgdGlsIGFuZHJlIHJlZ2lvbmVyLgpBbGxlIGtvbW11bmVyIGhhciBrYW5za2plIGlra2UgYXJiZWlkc3BsYXNzZXIgaW5uZW4gYWxsZSBmYWdmZWx0LCBhcmJlaWRzdGFrZXJlIGVyIGRlcmZvciBhdmhlbmdpZyBhdiDDpSBwZW5kbGVyIHRpbCBhbmRyZSBrb21tdW5lciBmb3Igw6UgZmlubmUgcmVsZXZhbnQgYXJiZWlkLgpEZXQgc2FtbWUgZ2plbGRlciBkZXJzb20gYXJiZWlkc3Rha2VyIGhhciB0aWxow7hyaWdoZXQgdGlsIGVuIGtvbW11bmUsIG1lbiBkZXQgaWtrZSBmaW5uZXMgcmVsZXZhbnQgYXJiZWlkIGRhIGVyIGhhbiBvZ3PDpSBuw7hkdCB0aWwgw6Ugc8O4a2Ugam9iYiBpIGFuZHJlIGtvbW11bmVyLgpIZXIga29tbWVyIGJlZ3JlcGVuZSBpbm5wZW5kbGluZyBvZyB1dHBlbmRsaW5nIGlubiwgc29tIGJldHlyIGF0IG5vZW4ga29tbXVuZXIgZWxsZXIgcmVnaW9uZXIgaGFyIGZsZXJlIGFyYmVpZHNwbGFzc2VyIHRpbGdqZW5nZWxpZ2UgZW5uIGRlIGhhciBpbm5ieWdnZXJlIHNvbSBrYW4gam9iYmUgaW5uYWQgaSBrb21tdW5lbiBlbGxlciBhdCBkZSBpa2tlIGhhciBub2sgYXJiZWlkc3BsYXNzZXIgb2cgaW5uYnlnZ2VyZW5lIGVyIG7DuGR0IHRpbCDDpSBzw7hrZSBqb2JiIGFuZHJlIHBsYXNzZXIuClZpIHNrYWwgc2UgcMOlIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgc29tIHZpbCBrdW5uZSBmb3J0ZWxsZSBvc3MgaSBodmlsa2VuIGdyYWQgZXQgc3RlZCBlciBpbnRlZ3JlcnQgaSBldCBzdMO4cnJlIGFyYmVpZHNtYXJrZWQgPGh0dHBzOi8vcmVnaW9uYWxhbmFseXNlLm5vL3JhcHBvcnQvMzAwNC8xLzQ+LgoKTmVkZW5mb3IgdmlsIHZpIGbDuHJzdCB0YSBmb3Igb3NzIHJlZ2lvbmVuIEhhdWdhbGFuZGV0IG9nIFN1bm5ob3JkbGFuZCBtZWQgVWxsZW5zdmFuZywgb2cgc2UgcMOlIGRpc3NlIHJlZ2lvbmVuZSBodmVyIGZvciBzZWcuClPDpSBrb21tZXIgZW4gdGFiZWxsIHNvbSB0YXIgZm9yIHNlZyBkaXNzZSByZWdpb25lbmUgc2FtbGV0LgpWaSDDuG5za2VyIGbDuHJzdCDDpSBza2lsbGUgZGlzc2UgdG8gcmVnaW9uZW5lIGZvciDDpSBzZSBpIGh2aWxrZW4ga29tbXVuZSBhbmRlbGVuIGF2IGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgZXIgc3TDuHJzdCBvZyBtaW5zdC4KRm9yIHPDpSDDpSBzZSBww6UgcGVuZGxpbmdlbiBtZWxsb20gcmVnaW9uZW5lLgoKSSByYWRlbmUgc2VlcyBwZW5kbGluZyBpbm4gdGlsIGtvbW11bmVuZS4KTmVkZXJzdGUgcmFkIHZpc2VyIHRvdGFsZW4gYXYgYW50YWxsIHBlbmRsZXJlIGlubiB0aWwgZGVuIGVua2VsdGUga29tbXVuZS4KSGVyIGthbiB2aSBzZSBlbiBhbmRlbCBzdGlsbGluZ2VyIHNvbSBlciBiZXNhdHQgYXYgYXJiZWlkc3Rha2VyZSBmcmEgYW5kcmUga29tbXVuZXIgaSBIYXVnYWxhbmRzcmVnaW9uZW4uCgpJIGtvbG9ubmVuZSBzZXIgbWFuIGRlIHNvbSBwZW5kbGVyZSB1dCBhdiBodmVyIGVua2VsdCBrb21tdW5lLgpEZXQgdmlsIHNpIGFyYmVpZHN0YWtlcmUgc29tIGJvciBpIGVuIGtvbW11bmUsIG9nIHNvbSBoYXIgYXJiZWlkc3RlZCBpIGVuIGFubmVuIGtvbW11bmUgaW5uZW5mb3IgSGF1Z2xhbmRzcmVnaW9uZW4uCgpEZSBzb20gZXIgbWFya2VydCBtZWQgZ3VsdCBlciBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGkgc2FtbWUga29tbXVuZS4KCkhhdWdsYW5kc3JlZ2lvbmVuOgoKIVtdKEJpbGRlL0hhdWdhbGFuZGV0LlBORyAiSGF1Z2xhbmRzcmVnaW9uZW4iKQoKSGF1Z2FsYW5kc3JlZ2lvbmVuIGhhciA0NDExOSBhcmJlaWRzcGxhc3NlciwgaHZvcmF2IDEzMTcwIGVyIHBlbmRsZXJlLgoKSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFR5c3bDpnIgZXIgZGUga29tbXVuZW5lIGkgcmVnaW9uZW4gbWVkIGjDuHllc3QgYW5kZWwgcGVuZGxlcmUgYsOlZGUgbsOlciBkZXQgZ2plbGRlciBpbm4tIG9nIHV0cGVuZGxpbmcuCkxhIG9zcyBzZSBuw6ZybWVyZSBww6UgSGF1Z2VzdW5kIHNvbSBoYXIgZW4gc3RvciBkZWwgYXYgYXJiZWlkc3Rha2VybmUgaSByZWdpb25lbi4KRGV0IGdqZWxkZXIgYsOlZGUgbsOlciB2aSBzZXIgcMOlIGlubnBlbmRsaW5nLCB1dHBlbmRsaW5nIG9nIGRlIHNvbSBib3Igb2cgam9iYmVyIGkgc2FtbWUga29tbXVuZS4KVXQgaWZyYSB0YWJlbGxlbiBrYW4gdmkgc2UgYXQgSGF1Z2VzdW5kIGhhciAxMTcxNCBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGkga29tbXVuZW4uCkZyYSBIYXVnZXN1bmQgZXIgZGV0IGVrc2VtcGVsdmlzIDEwMjkgYXJiZWlkc3Rha2VyZSBzb20gcGVuZGxlciB0aWwgVHlzdsOmciBvZyAyNTg2IGFyYmVpZHN0YWtlcmUgc29tIHBlbmRsZXIgdGlsIEthcm3DuHkuClRpbCBTYXVkYSBvZyBVdHNpcmEgZXIgZGV0IGVuIGJldHlkZWxpZyBsYXZlcmUgYW5kZWwgc29tIHBlbmRsZXIuCkdydW5uZW4gdGlsIGF0IGRldCBub2sgYXQgZGV0IGVyIG1pbmRyZSBrb21tdW5lciBtZWQgZsOmcnJlIGFyYmVpZHNwbGFzc2VyLgpNYW5nZSBhdiBkZSBzb20gYm9yIGkgZGlzdHJpa3RlbmUgc29tIGVrc2VtcGVsdmlzIFNhdWRhIG9nIFV0c2lyYSBqb2JiZXIgb2cgYm9yIGkgc2FtbWUga29tbXVuZS4KVmkga2FuIHNlIGF0IGkgU2F1ZGEgam9iYmVyIG9nIGJvciBkZXQgMTc4OSBhcmJlaWRzdGFrZXIsIG1lbnMgZGUgaGFyIDMxIHN0eWtrIHNvbSBwZW5kbGVyIGlubiB0aWwga29tbXVuZW4gb2cgNjYgc3R5a2sgc29tIHBlbmRsZXIgdXQgYXYga29tbXVuZW4uCkRldCBrYW4gdsOmcmUgZmxlcmUgc29tIHBlbmRsZXIgaW5uIHRpbCBvZyB1dCBhdiBrb21tdW5lbiBmcmEgYW5kcmUgcmVnaW9uZXIsIG1lbiBoZXIgc2VyIHZpIHRhbGxlbmUgcMOlIGRlIHNvbSBwZW5kbGVyIGkgSGF1Z2FsYW5kc3JlZ2lvbmVuLgoKVmkgdmV0IGF0IEhhdWdlc3VuZCBlciByZWdpb25zZW50cnVtIG1lZCBzeWtlaHVzIG9nIGjDuGdza29sZS4KU2FtdGlkaWcgaGFyIEhhdWdlc3VuZCBmbGVyZSBvbGplIG9nIHNqw7hmYXJ0c27DpnJpbmdlci4KRGV0IGVyIHNlbnRyYWxpc2VydCBzb20gYmV0eXIgYXQgZGV0IGVyIGdydW5ubGFnIGZvciBldCBzdMO4cnJlIGpvYmJtYXJrZWQuCkRldCBlciDDpXJzYWtlbiB0aWwgYXQgSGF1Z2VzdW5kIGhhciBtZXIgaW5ucGVuZGxpbmcgZW5uIGRlIGFuZHJlIGtvbW11bmVuZSBpIHJlZ2lvbmVuLgpLYXJtw7h5IG9nIFR5c3bDpnIgc29tIGxpZ2dlciBuw6ZybWVzdCBIYXVnZXN1bmQgaGFyIHN0w7hyc3QgYW5kZWwgdXRwZW5kbGluZywgb2dzw6UgdGlsIEhhdWdlc3VuZC4KClN1bm5ob3JkbGFuZAoKIVtdKEJpbGRlL1N1bm5ob3JkbGFuZC5QTkcgIlN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nIikKCkkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGVyIGRldCAyODI3NSBhcmJlaWRzdGFrZXJlIG9tIGhhciBzaW4gYXJiZWlkc3BsYXNzLCBhdiBkaXNzZSBlciBkZXQgMjU3NSBzb20gaGFyIHNpdHQgYXJiZWlkIGkgZW4gYW5uZW4ga29tbXVuZSBlbm4gZGVuIGRlIGJvciBpLgoKU29tIHZpIGthbiBzZSBlciBTdG9yZCBkZW4ga29tbXVuZW4gbWVkIGZsZXN0IGFyYmVpZHN0YWtlcmUuCkRldHRlIGthbiB2aSBzZSBpIHNhbW1lbmhlbmcgbWVkIGF0IFN0b3JkIGVyIHNvbSBldCBzZW50cnVtIGZvciByZWdpb25lbi4KRW4gZGVsIGF2IGRlIGludGVya29tbXVuYWxlIHNhbWFyYmVpZGVuZSBoYXIgc2luZSBrb250b3JlciBsb2thbGlzZXJ0IHDDpSBTdG9yZC4KU3RvcmQgaGFyIDczMTQgc29tIGLDpWRlIGJvciBvZyBhcmJlaWRlciBpbm5hZCBpIGtvbW11bmVuLgrDhSBhdiBTdG9yZGFidWVuIHNvbSBwZW5kbGVyIHV0IGF2IGtvbW11bmVuIGVyIGRldCBmbGVzdCBzb20gcGVuZGxlciB0aWwgQsO4bWxvIG9nIEZpdGphci4KRGV0dGUgZ2plbGRlciBvZ3PDpSBtb3RzYXR0IGRhIFN0b3JkIGbDpXIgZmxlc3QgaW5ucGVuZGxlcmUgZnJhIGRlIHNhbW1lIGtvbW11bmVuZS4KU3RvcmQgb2cgVWxsZW5zdmFuZyBlciBkZSBlbmVzdGUga29tbXVuZW5lIHNvbSBoYXIgZmxlcmUgc29tIHBlbmRsZXIgaW5uIGVubiB1dC4KCkkgRXRuZSBlciBkZXQgZ2Fuc2tlIGxpa3QgbWVkIGlubiBvZyB1dHBlbmRsZXJlIGRhIGRlIGhhciA2NiBzb20gcGVuZGxlciB1dCBvZyA2MSBzb20gcGVuZGxlciBpbm4gdGlsIGtvbW11bmVuLgpFdG5lIGVyIG9nc8OlIGRlbiBrb21tdW5lbiBzb20gaGFyIG1pbnN0IGFyYmVpZGVyZSBzb20gZHJpdmVyIG1lZCBwZW5kbGluZy4KClZpIGhhciB2YWxndCDDpSB0YSBtZWQgVWxsZW5zdmFuZyBpIFN1bm5ob3JkbGFuZHNvdmVyc2lrdGVuLgpFdG5lIG9nIEt2aW5uaGVyYWQgZXIgYmVnZ2UgbmFib2tvbW11bmVyIHRpbCBVbGxlbnN2YW5nLgpVbGxlbnN2YW5nIGhhciBsaXRlIGLDpWRlIGlubiBvZyB1dHBlbmRsaW5nLgoKRW4gc2FtbGV0IG92ZXJzaWt0IG92ZXIgSGF1Z2FsYW5kc3JlZ2lvbmVuIG9nIFN1bm5ob3JkbGFuZHNyZWdpb25lbgoKIVtdKEJpbGRlL1NhbWxldC5QTkcgIlNhbWxldCBvdmVyc2lrdCIpCgpWaSBoYXIgc2V0dCBww6UgaW5uZGVsaW5nZW5lIGkgZGUgZm9yc2tqZWxsaWdlIHJlZ2lvbmVuZS4KVmlkZXJlIMO4bnNrZXIgdmkgw6Ugc2UgcMOlIHJlZ2lvbmVuZSBpIGVuIHNhbWxldCB0YWJlbGwuCgpWaSBoYXIgdGlkbGlnZXJlIHNrcmV2ZXQgb20gYXQgSGF1Z2FsYW5kc3JlZ2lvbmVuIGhhciAxMzE3MCBwZW5kbGVyZSwgbWVucyBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gb2cgVWxsZW5zdmFuZyBoYXIgMjU3NSBwZW5kbGVyZS4KT20gdmkgc2VyIGJlZ2dlIHJlZ2lvbmVuZSBzYW1sZXQsIMO4a2VyIGFudGFsbCBwZW5kbGVyZSBtZWQgdG90YWx0IDMzMTEgYXJiZWlkc3Rha2VyZS4KRGV0IHZpbCBzaSBhdCBkZXQgZXIgMzMxMSBzdHlra2VyIHNvbSBwZW5kbGVyIHDDpSB0dmVycyBhdiByZWdpb25lbmUuCgpVdHNpcmEgaGFyIGlra2UgaW5uLSBlbGxlciB1dHBlbmRsZXJlIHRpbCBTdW5uaG9yZGxhbmQuCkJvcnRzZXR0IGZyYSBlbiBwZXJzb24gc29tIHBlbmRsZXIgdGlsIFN2ZWlvIGhhciBoZWxsZXIgaWtrZSBCb2tuIHV0cGVuZGxpbmcgdGlsIFN1bm5ob3JkbGFuZC4KCkhhdWdlc3VuZCBlciBkZW4ga29tbXVuZW4gc29tIGhhciBmbGVzdCBwZW5kbGVyZSBpbm4gdGlsIGtvbW11bmVuLgpEZSBsaWdnZXIgbGFuZ3QgZm9yYW4gZGUgYW5kcmUga29tbXVuZW5lIG7DpXIgZGV0IGVyIHNuYWtrIG9tIHBlbmRsaW5nIGlubiB0aWwga29tbXVuZW5lLgpLYXJtw7h5IGVyIGRlbiBrb21tdW5lbiBzb20gaGFyIGZsZXN0IGlubmJ5Z2dlcmUgc29tIHBlbmRsZXIgdXQgYXYga29tbXVuZW4uCgpWaWRlcmUga2FuIG1hbiBzZSBww6UgZGUgc3lzdGVtYXRpc2tlIGZvcnNramVsbGVuZSBzZXR0IGkgZm9yaG9sZCB0aWwgc2VudHJhbGl0ZXQgb2cgdGlsZ2plbmdlbGlnaGV0IGkgZGV0IGxva2FsZSBhcmJlaWRzbWFya2VkZXQuCgpIYXVnZXN1bmQsIEthcm3DuHkgb2cgU3RvcmQgZXIgc2VudHJhbGUga29tbXVuZXIgaHZvciBkZXQgZmlubmVzIGVuIHN0b3IgYW5kZWwgYXJiZWlkc3BsYXNzZXIgb2cgdGlsZ2plbmdlbGlnaGV0ZW4gaSBhcmJlaWRzbWFya2VkZXQgZXIgc3TDuHJyZSBlbm4gaSBla3NlbXBlbHZpcyBTYXVkYSwgVXRzaXJhLCBUeXNuZXMgZWxsZXIgVWxsZW5zdmFuZy4KRGUgc2VudHJhbGlzZXJ0ZSBrb21tdW5lbmUgaGFyIGVuIGZvcmRlbCBpIGZvcmhvbGQgdGlsIMOlIHNrYXBlIGtseW5nZXIsIGRldCBtZWQgdGFua2UgcMOlIGF0IG7DpXIgZmxlcmUgbWVubmVza2VyIGJvc2V0dGVyIHNlZyBpIHNhbW1lIG9tcsOlZGUga2FuIGVuIGRyYSBueXR0ZSBhdiBrb21wZXRhbnNlbiBkZSBpbm5laGFyLgpTYXVkYSwgVXRzaXJhLCBUeXNuZXMgb2cgVWxsZW5zdmFuZyBlciBla3NlbXBsZXIgcMOlIGtvbW11bmVyIGkgdXRrYW50ZW4gYXYgcmVnaW9uZW5lLgpEZSBiZWZpbm5lciBzZWcgc8OlcGFzcyBsYW5ndCB1dGVuZm9yIGF0IGRlIGlra2UgdmlsIGRyYSBueXR0ZSBhdiBzZW50cmFsaXRldC4KCkkgZmlndXIgMyBvZyA0IHZpc2VzIGRldCBhdCBkZSBzaXN0ZSAxMCDDpXJlbmUgaGFyIEhhdWdlc3VuZCBoYXR0IGVuIHJlZHVrc2pvbiBpIGFudGFsbCBhbnNhdHRlLCBtZW4gS2FybcO4eSwgVmluZGFmam9yZCBvZyBUeXN2w6ZyIGhhciBoYXR0IGVuIG1hcmthbnQgw7hrbmluZyBpIGFudGFsbCBhcmJlaWRzdGFrZXJlLgpEZXQgdmkgdmV0IGVyIGF0IGRldCBoYXIgdXR2aWtsZXQgc2VnIHN0w7hycmUgbsOmcmluZ3NrbHluZ2VyIHV0ZW5mb3IgSGF1Z2VzdW5kIGRlIHNpc3RlIMOlcmVuZSBzb20ga2FuIGhhIGVuIHNhbW1lbmhlbmcgbWVkIMO4a25pbmcgaSBhbnRhbGwgYW5zYXR0ZS4KU2FtdGlkaWcgaGFyIG9samVicmFuc2plbiBpIHNhbW1lIHBlcmlvZGUgc2xpdHQgbWVkIG5lZGdhbmdzdGlkZXIgc29tIHDDpXZpcmtlciBiw6VkZSBIYXVnZXN1bmQgb2cgU3RvcmQuCkRpc3NlIGtvbW11bmVuZSBoYXIgZW4gZGVsIG9samViYXNlcnRlIG7DpnJpbmdlciBvZyBpIGRlIHBlcmlvZGVuZSBvbGplbWFya2VkZXQgc3ZpbmdlciB2aWwgYXJiZWlkc21hcmtlZGV0IHZpc2UgbWFya2FudCBuZWRnYW5nIGkgYW50YWxsIGFyYmVpZHNwbGFzc2VyLgpEZXQgdmlsIG9nc8OlIHZpc2UgZW4gYmV0eWRlbGlnIMO4a25pbmcgaSBhbnRhbGwgYXJiZWlkc3BsYXNzZXIgb20gZGV0IGVyIG9wcGdhbmdzdGlkZXIuCk9wcGdhbmdzdGlkZXIgaSBvbGplbsOmcmluZ2VuIGdpciBlbiDDuGtuaW5nIGF2IHBlbmRsZXJlIGlubiB0aWwga29tbXVuZXIgc29tIGhhciB2aXJrc29taGV0ZXIgaW5uZW5mb3Igb2xqZW7DpnJpbmdlbi4KCi0gICAKCmBgYHtyIHNpc3RlfQojIFNpc3RlCmBgYAoKLSAgIAo=